summaryrefslogtreecommitdiffstats
path: root/container-search/src/main
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-03-06 14:45:02 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2017-03-06 14:45:02 +0100
commit2813113731f97f7ab24c876146178ce8d64d9496 (patch)
treea582961914922ef049479ba26720aa4c8cffc6f2 /container-search/src/main
parentd863ca552374e3929cd2eeac041ee62b2cf8e7d5 (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.java8
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/YqlParser.java14
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);