summaryrefslogtreecommitdiffstats
path: root/container-search
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
parentd863ca552374e3929cd2eeac041ee62b2cf8e7d5 (diff)
raw user input will be an forwarded as exact match.
Diffstat (limited to 'container-search')
-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
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/query/ItemsCommonStuffTestCase.java4
-rw-r--r--container-search/src/test/java/com/yahoo/search/query/textserialize/item/test/ParseItemTestCase.java2
-rw-r--r--container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java24
7 files changed, 48 insertions, 16 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);
diff --git a/container-search/src/test/java/com/yahoo/prelude/query/ItemsCommonStuffTestCase.java b/container-search/src/test/java/com/yahoo/prelude/query/ItemsCommonStuffTestCase.java
index f77341033fb..fc8e9daae35 100644
--- a/container-search/src/test/java/com/yahoo/prelude/query/ItemsCommonStuffTestCase.java
+++ b/container-search/src/test/java/com/yahoo/prelude/query/ItemsCommonStuffTestCase.java
@@ -181,10 +181,10 @@ public class ItemsCommonStuffTestCase {
public final void testIdStuff() {
Item i;
final String expected = "i";
- i = new ExactstringItem(expected);
+ i = new ExactStringItem(expected);
assertEquals(ItemType.EXACT, i.getItemType());
assertEquals("EXACTSTRING", i.getName());
- assertEquals(expected, ((ExactstringItem) i).stringValue());
+ assertEquals(expected, ((ExactStringItem) i).stringValue());
i = new PrefixItem("p");
assertEquals(ItemType.PREFIX, i.getItemType());
assertEquals("PREFIX", i.getName());
diff --git a/container-search/src/test/java/com/yahoo/search/query/textserialize/item/test/ParseItemTestCase.java b/container-search/src/test/java/com/yahoo/search/query/textserialize/item/test/ParseItemTestCase.java
index d59fd23e567..afc0234540a 100644
--- a/container-search/src/test/java/com/yahoo/search/query/textserialize/item/test/ParseItemTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/query/textserialize/item/test/ParseItemTestCase.java
@@ -116,7 +116,7 @@ public class ParseItemTestCase {
@Test
public void parse_exactString() throws ParseException {
- ExactstringItem subStringItem = (ExactstringItem) parse("(EXACT 'word')");
+ ExactStringItem subStringItem = (ExactStringItem) parse("(EXACT 'word')");
assertThat(subStringItem.getWord(), is("word"));
}
diff --git a/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java b/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java
index 8e5ebbad614..32facd7a754 100644
--- a/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java
@@ -8,6 +8,7 @@ import com.yahoo.prelude.IndexFacts;
import com.yahoo.prelude.IndexModel;
import com.yahoo.prelude.query.AndItem;
import com.yahoo.prelude.query.IndexedItem;
+import com.yahoo.prelude.query.ExactStringItem;
import com.yahoo.prelude.query.Item;
import com.yahoo.prelude.query.PhraseItem;
import com.yahoo.prelude.query.PrefixItem;
@@ -290,6 +291,29 @@ public class YqlParserTestCase {
}
@Test
+ public void testRaw() {
+ Item root = parse("select foo from bar where baz contains (\"yoni jo dima\");").getRoot();
+ assertTrue(root instanceof WordItem);
+ assertFalse(root instanceof ExactStringItem);
+ assertEquals("yoni jo dima", ((WordItem)root).getWord());
+
+ root = parse("select foo from bar where baz contains ([{\"grammar\":\"raw\"}]\"yoni jo dima\");").getRoot();
+ assertTrue(root instanceof WordItem);
+ assertFalse(root instanceof ExactStringItem);
+ assertEquals("yoni jo dima", ((WordItem)root).getWord());
+
+ root = parse("select foo from bar where userInput(\"yoni jo dima\");").getRoot();
+ assertTrue(root instanceof AndItem);
+ AndItem andItem = (AndItem) root;
+ assertEquals(3, andItem.getItemCount());
+
+ root = parse("select foo from bar where [{\"grammar\":\"raw\"}]userInput(\"yoni jo dima\");").getRoot();
+ assertTrue(root instanceof WordItem);
+ assertTrue(root instanceof ExactStringItem);
+ assertEquals("yoni jo dima", ((WordItem)root).getWord());
+ }
+
+ @Test
public void testAccentDropping() {
assertFalse(getRootWord("select foo from bar where baz contains " +
"([ {\"accentDrop\": false} ]\"colors\");").isNormalizable());