summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-10-29 14:46:08 +0000
committerJon Bratseth <bratseth@oath.com>2018-10-29 14:46:08 +0000
commit55fdd38327bc9edff8b457c6aa41b595475a597b (patch)
tree131954dfc5aee81f00cc7490de13a82b20ea0f44 /container-search
parent365972496256236dfd3599d547a167af0d2d4de2 (diff)
Respect the exact match setting
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/YqlParser.java13
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);