Reduce resource usage waste in edge-search by recycling QueryVariants

This commit is contained in:
Viktor Lofgren 2022-11-18 17:05:43 +01:00
parent 2f7b429217
commit e86f52d7d8

View File

@ -23,15 +23,13 @@ import java.util.*;
@Singleton @Singleton
public class QueryFactory { public class QueryFactory {
private final LanguageModels lm;
private final TermFrequencyDict dict;
private final EnglishDictionary englishDictionary; private final EnglishDictionary englishDictionary;
private final NGramBloomFilter nGramBloomFilter;
private final Logger logger = LoggerFactory.getLogger(getClass()); private final Logger logger = LoggerFactory.getLogger(getClass());
private final SearchResultValuator searchResultValuator; private final SearchResultValuator searchResultValuator;
private NearQueryProcessor nearQueryProcessor; private final NearQueryProcessor nearQueryProcessor;
private static final int RETAIN_QUERY_VARIANT_COUNT = 5; private static final int RETAIN_QUERY_VARIANT_COUNT = 5;
private final ThreadLocal<QueryVariants> queryVariants;
@Inject @Inject
public QueryFactory(LanguageModels lm, public QueryFactory(LanguageModels lm,
@ -40,17 +38,16 @@ public class QueryFactory {
NGramBloomFilter nGramBloomFilter, NGramBloomFilter nGramBloomFilter,
SearchResultValuator searchResultValuator, SearchResultValuator searchResultValuator,
NearQueryProcessor nearQueryProcessor) { NearQueryProcessor nearQueryProcessor) {
this.lm = lm;
this.dict = dict;
this.englishDictionary = englishDictionary; this.englishDictionary = englishDictionary;
this.nGramBloomFilter = nGramBloomFilter;
this.searchResultValuator = searchResultValuator; this.searchResultValuator = searchResultValuator;
this.nearQueryProcessor = nearQueryProcessor; this.nearQueryProcessor = nearQueryProcessor;
this.queryVariants = ThreadLocal.withInitial(() -> new QueryVariants(lm, dict, nGramBloomFilter, englishDictionary));
} }
public QueryParser getParser() { public QueryParser getParser() {
return new QueryParser(englishDictionary, new QueryVariants(lm ,dict, nGramBloomFilter, englishDictionary)); return new QueryParser(englishDictionary, queryVariants.get());
} }
public EdgeSearchQuery createQuery(EdgeUserSearchParameters params) { public EdgeSearchQuery createQuery(EdgeUserSearchParameters params) {
@ -207,7 +204,6 @@ public class QueryFactory {
.timeoutMs(250) .timeoutMs(250)
.fetchSize(4096) .fetchSize(4096)
.quality(qualityLimit) .quality(qualityLimit)
.rank(rankLimit)
.domains(domains); .domains(domains);
if (domain != null) { if (domain != null) {
@ -219,7 +215,6 @@ public class QueryFactory {
EdgeSearchSpecification specs = specsBuilder.build(); EdgeSearchSpecification specs = specsBuilder.build();
return new EdgeSearchQuery(specs, searchTermsHuman, domain); return new EdgeSearchQuery(specs, searchTermsHuman, domain);
} }
private String normalizeDomainName(String str) { private String normalizeDomainName(String str) {