diff options
author | Jon Bratseth <bratseth@oath.com> | 2018-10-29 14:46:08 +0000 |
---|---|---|
committer | Jon Bratseth <bratseth@oath.com> | 2018-10-29 14:46:08 +0000 |
commit | 55fdd38327bc9edff8b457c6aa41b595475a597b (patch) | |
tree | 131954dfc5aee81f00cc7490de13a82b20ea0f44 /container-search | |
parent | 365972496256236dfd3599d547a167af0d2d4de2 (diff) |
Respect the exact match setting
Diffstat (limited to 'container-search')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/yql/YqlParser.java | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java b/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java index e4ae759eec7..59c864dabe3 100644 --- a/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java +++ b/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java @@ -1254,15 +1254,21 @@ public class YqlParser implements Parser { OperatorNode<ExpressionOperator> ast, Class<?> parent, SegmentWhen segmentPolicy) { String wordData = getStringContents(ast); - return instantiateWordItem(field, wordData, ast, parent, segmentPolicy, false, decideParsingLanguage(ast, wordData)); + return instantiateWordItem(field, wordData, ast, parent, segmentPolicy, null, decideParsingLanguage(ast, wordData)); } + /** + * Converts the payload of a contains statement into an Item + * + * @param exactMatch true to always create an ExactStringItem, false to never do so, and null to + * make the choice based on the field settings + */ @NonNull private Item instantiateWordItem(String field, String rawWord, OperatorNode<ExpressionOperator> ast, Class<?> parent, SegmentWhen segmentPolicy, - boolean exactMatch, + Boolean exactMatch, Language language) { String wordData = rawWord; if (getAnnotation(ast, NFKC, Boolean.class, Boolean.FALSE, @@ -1279,6 +1285,7 @@ public class YqlParser implements Parser { "setting for whether to use suffix match of input data"); boolean substrMatch = getAnnotation(ast, SUBSTRING, Boolean.class, Boolean.FALSE, "setting for whether to use substring match of input data"); + boolean exact = exactMatch != null ? exactMatch : indexFactsSession.getIndex(field).isExact(); String grammar = getAnnotation(ast, USER_INPUT_GRAMMAR, String.class, Query.Type.ALL.toString(), "grammar for handling word input"); Preconditions.checkArgument((prefixMatch ? 1 : 0) + @@ -1286,7 +1293,7 @@ public class YqlParser implements Parser { "Only one of prefix, substring and suffix can be set."); TaggableItem wordItem; - if (exactMatch) { + if (exact) { wordItem = new ExactStringItem(wordData, fromQuery); } else if (prefixMatch) { wordItem = new PrefixItem(wordData, fromQuery); |