diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-03-06 14:45:02 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-03-06 14:45:02 +0100 |
commit | 2813113731f97f7ab24c876146178ce8d64d9496 (patch) | |
tree | a582961914922ef049479ba26720aa4c8cffc6f2 /container-search/src/main | |
parent | d863ca552374e3929cd2eeac041ee62b2cf8e7d5 (diff) |
raw user input will be an forwarded as exact match.
Diffstat (limited to 'container-search/src/main')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/query/ExactStringItem.java (renamed from container-search/src/main/java/com/yahoo/prelude/query/ExactstringItem.java) | 10 | ||||
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/query/textserialize/item/ExactStringConverter.java | 8 | ||||
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java | 2 | ||||
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/yql/YqlParser.java | 14 |
4 files changed, 21 insertions, 13 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/ExactstringItem.java b/container-search/src/main/java/com/yahoo/prelude/query/ExactStringItem.java index 151684ccf96..a6cbffd8016 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/ExactstringItem.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/ExactStringItem.java @@ -2,16 +2,18 @@ package com.yahoo.prelude.query; /** + * Used to signal that this term requires exact match if the backend supports it. + * * @author baldersheim */ -// TODO: baldersheim to fix javadoc -public class ExactstringItem extends WordItem { - public ExactstringItem(String substring) { +public class ExactStringItem extends WordItem { + + public ExactStringItem(String substring) { this(substring, false); } - public ExactstringItem(String substring, boolean isFromQuery) { + public ExactStringItem(String substring, boolean isFromQuery) { super(substring, isFromQuery); } diff --git a/container-search/src/main/java/com/yahoo/search/query/textserialize/item/ExactStringConverter.java b/container-search/src/main/java/com/yahoo/search/query/textserialize/item/ExactStringConverter.java index 98b0b1673f6..2c525633458 100644 --- a/container-search/src/main/java/com/yahoo/search/query/textserialize/item/ExactStringConverter.java +++ b/container-search/src/main/java/com/yahoo/search/query/textserialize/item/ExactStringConverter.java @@ -1,15 +1,15 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.search.query.textserialize.item; -import com.yahoo.prelude.query.ExactstringItem; +import com.yahoo.prelude.query.ExactStringItem; /** * @author baldersheim */ -// TODO: baldersheim to fix javadoc + public class ExactStringConverter extends WordConverter { @Override - ExactstringItem newTermItem(String word) { - return new ExactstringItem(word); + ExactStringItem newTermItem(String word) { + return new ExactStringItem(word); } } diff --git a/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java b/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java index c3781e3637d..5115a635f9e 100644 --- a/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java +++ b/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java @@ -62,6 +62,7 @@ import com.yahoo.prelude.query.AndItem; import com.yahoo.prelude.query.AndSegmentItem; import com.yahoo.prelude.query.DotProductItem; import com.yahoo.prelude.query.EquivItem; +import com.yahoo.prelude.query.ExactStringItem; import com.yahoo.prelude.query.IndexedItem; import com.yahoo.prelude.query.IntItem; import com.yahoo.prelude.query.Item; @@ -1096,6 +1097,7 @@ public class VespaSerializer { dispatchBuilder.put(AndSegmentItem.class, new AndSegmentSerializer()); dispatchBuilder.put(DotProductItem.class, new DotProductSerializer()); dispatchBuilder.put(EquivItem.class, new EquivSerializer()); + dispatchBuilder.put(ExactStringItem.class, new WordSerializer()); dispatchBuilder.put(IntItem.class, new NumberSerializer()); dispatchBuilder.put(MarkerWordItem.class, new WordSerializer()); // gotcha dispatchBuilder.put(NearItem.class, new NearSerializer()); 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 5e8851bc5b3..176ef051968 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 @@ -31,6 +31,7 @@ import com.yahoo.prelude.query.AndSegmentItem; import com.yahoo.prelude.query.CompositeItem; import com.yahoo.prelude.query.DotProductItem; import com.yahoo.prelude.query.EquivItem; +import com.yahoo.prelude.query.ExactStringItem; import com.yahoo.prelude.query.IntItem; import com.yahoo.prelude.query.Item; import com.yahoo.prelude.query.Limit; @@ -660,9 +661,9 @@ public class YqlParser implements Parser { Language language = decideParsingLanguage(ast, wordData); Item item; if (USER_INPUT_RAW.equals(grammar)) { - item = instantiateWordItem(defaultIndex, wordData, ast, null, SegmentWhen.NEVER, language); + item = instantiateWordItem(defaultIndex, wordData, ast, null, SegmentWhen.NEVER, true, language); } else if (USER_INPUT_SEGMENT.equals(grammar)) { - item = instantiateWordItem(defaultIndex, wordData, ast, null, SegmentWhen.ALWAYS, language); + item = instantiateWordItem(defaultIndex, wordData, ast, null, SegmentWhen.ALWAYS, false, language); } else { item = parseUserInput(grammar, defaultIndex, wordData, language, allowEmpty); propagateUserInputAnnotations(ast, item); @@ -1255,14 +1256,15 @@ public class YqlParser implements Parser { OperatorNode<ExpressionOperator> ast, Class<?> parent, SegmentWhen segmentPolicy) { String wordData = getStringContents(ast); - return instantiateWordItem(field, wordData, ast, parent, segmentPolicy, decideParsingLanguage(ast, wordData)); + return instantiateWordItem(field, wordData, ast, parent, segmentPolicy, false, decideParsingLanguage(ast, wordData)); } @NonNull private Item instantiateWordItem(String field, String rawWord, OperatorNode<ExpressionOperator> ast, Class<?> parent, - SegmentWhen segmentPolicy, + SegmentWhen segmentPolicy, + boolean exactMatch, Language language) { String wordData = rawWord; if (getAnnotation(ast, NFKC, Boolean.class, Boolean.TRUE, @@ -1286,7 +1288,9 @@ public class YqlParser implements Parser { @NonNull final TaggableItem wordItem; - if (prefixMatch) { + if (exactMatch) { + wordItem = new ExactStringItem(wordData, fromQuery); + } else if (prefixMatch) { wordItem = new PrefixItem(wordData, fromQuery); } else if (suffixMatch) { wordItem = new SuffixItem(wordData, fromQuery); |