diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-08-16 09:54:38 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-08-16 09:54:38 +0200 |
commit | 02d0725e489540eca682c453dbf254fc63992c6a (patch) | |
tree | 89502a20ed2665cb456a83e30140941c762c9afb /container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java | |
parent | 7a89a68da3a50d8607b58fac9920329be6db4aa1 (diff) |
Make defaultIndex part of parser state
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java | 61 |
1 files changed, 19 insertions, 42 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java b/container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java index d682ca9564e..ad1e8525b4b 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/parser/AbstractParser.java @@ -7,7 +7,6 @@ import com.yahoo.prelude.Index; import com.yahoo.prelude.IndexFacts; import com.yahoo.prelude.query.AndSegmentItem; import com.yahoo.prelude.query.CompositeItem; -import com.yahoo.prelude.query.IndexedItem; import com.yahoo.prelude.query.Item; import com.yahoo.prelude.query.NullItem; import com.yahoo.prelude.query.PhraseItem; @@ -17,7 +16,6 @@ import com.yahoo.search.query.QueryTree; import com.yahoo.search.query.parser.Parsable; import com.yahoo.search.query.parser.ParserEnvironment; -import java.util.Iterator; import java.util.List; import java.util.ListIterator; @@ -29,6 +27,7 @@ import java.util.ListIterator; */ public abstract class AbstractParser implements CustomParser { + /** The current submodes of this parser */ protected Submodes submodes = new Submodes(); @@ -41,6 +40,8 @@ public abstract class AbstractParser implements CustomParser { /** The IndexFacts.Session of this query */ protected IndexFacts.Session indexFacts; + protected String defaultIndex; + /** * The counter for braces in URLs, braces in URLs are accepted so long as * they are balanced. @@ -134,38 +135,34 @@ public abstract class AbstractParser implements CustomParser { @Override public final Item parse(String queryToParse, String filterToParse, Language parsingLanguage, - IndexFacts.Session indexFacts, String defaultIndexName) { - return parse(queryToParse, filterToParse, parsingLanguage, indexFacts, defaultIndexName, null); + IndexFacts.Session indexFacts, String defaultIndex) { + return parse(queryToParse, filterToParse, parsingLanguage, indexFacts, defaultIndex, null); } private Item parse(String queryToParse, String filterToParse, Language parsingLanguage, - IndexFacts.Session indexFacts, String defaultIndexName, Parsable parsable) { + IndexFacts.Session indexFacts, String defaultIndex, Parsable parsable) { if (queryToParse == null) return null; - - tokenize(queryToParse, defaultIndexName, indexFacts, parsingLanguage); + tokenize(queryToParse, defaultIndex, indexFacts, parsingLanguage); if (parsingLanguage == null && parsable != null) { - String detectionText = generateLanguageDetectionTextFrom(tokens, indexFacts, defaultIndexName); + String detectionText = generateLanguageDetectionTextFrom(tokens, indexFacts, defaultIndex); if (detectionText.isEmpty()) // heuristic detection text extraction is fallible detectionText = queryToParse; parsingLanguage = parsable.getOrDetectLanguage(detectionText); } - setState(parsingLanguage, indexFacts); - Item root = parseItems(defaultIndexName); + setState(parsingLanguage, indexFacts, defaultIndex); + Item root = parseItems(); + if (filterToParse != null) { AnyParser filterParser = new AnyParser(environment); if (root == null) { - root = filterParser.parseFilter(filterToParse, parsingLanguage, indexFacts); + root = filterParser.parseFilter(filterToParse, parsingLanguage, indexFacts, defaultIndex); } else { - root = filterParser.applyFilter(root, filterToParse, parsingLanguage, indexFacts); + root = filterParser.applyFilter(root, filterToParse, parsingLanguage, indexFacts, defaultIndex); } } - root = simplifyPhrases(root); - if (defaultIndexName != null) { - assignDefaultIndex(indexFacts.getCanonicName(defaultIndexName), root); - } - return root; + return simplifyPhrases(root); } /** @@ -232,28 +229,7 @@ public abstract class AbstractParser implements CustomParser { return kind.equals(tokenOrNull.kind); } - protected abstract Item parseItems(String defaultIndexName); - - /** - * Assigns the default index to query terms having no default index. The - * parser _should_ have done this, for some reason it doesn't. - * - * @param defaultIndex the default index to assign - * @param item the item to check - */ - private static void assignDefaultIndex(String defaultIndex, Item item) { - if (defaultIndex == null || item == null) return; - - if (item instanceof IndexedItem indexName) { - if ("".equals(indexName.getIndexName())) - indexName.setIndexName(defaultIndex); - } - else if (item instanceof CompositeItem) { - Iterator<Item> items = ((CompositeItem)item).getItemIterator(); - while (items.hasNext()) - assignDefaultIndex(defaultIndex, items.next()); - } - } + protected abstract Item parseItems(); /** * Unicode normalizes some piece of natural language text. The chosen form @@ -265,10 +241,11 @@ public abstract class AbstractParser implements CustomParser { return environment.getLinguistics().getNormalizer().normalize(input); } - protected void setState(Language queryLanguage, IndexFacts.Session indexFacts) { + protected void setState(Language queryLanguage, IndexFacts.Session indexFacts, String defaultIndex) { this.indexFacts = indexFacts; - language = queryLanguage; - submodes.reset(); + this.defaultIndex = defaultIndex; + this.language = queryLanguage; + this.submodes.reset(); } /** |