aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/test/java/com/yahoo/search/yql
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/test/java/com/yahoo/search/yql')
-rw-r--r--container-search/src/test/java/com/yahoo/search/yql/ResegmentingTestCase.java147
-rw-r--r--container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java94
2 files changed, 35 insertions, 206 deletions
diff --git a/container-search/src/test/java/com/yahoo/search/yql/ResegmentingTestCase.java b/container-search/src/test/java/com/yahoo/search/yql/ResegmentingTestCase.java
deleted file mode 100644
index 1bed8ff2233..00000000000
--- a/container-search/src/test/java/com/yahoo/search/yql/ResegmentingTestCase.java
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.search.yql;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.yahoo.search.query.parser.Parsable;
-import com.yahoo.search.query.parser.ParserEnvironment;
-
-/**
- * Check rules for resegmenting words in YQL+ when segmenter is deemed
- * incompatible. The class under testing is {@link YqlParser}.
- *
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
- */
-public class ResegmentingTestCase {
- private YqlParser parser;
-
- @Before
- public void setUp() throws Exception {
- ParserEnvironment env = new ParserEnvironment();
- parser = new YqlParser(env);
- }
-
- @After
- public void tearDown() throws Exception {
- parser = null;
- }
-
- @Test
- public final void testWord() {
- assertEquals(
- "title:'a b'",
- parser.parse(
- new Parsable()
- .setQuery("select * from sources * where [{\"segmenter\": {\"version\": \"18.47.39\", \"backend\": \"nonexistant\"}}] (title contains \"a b\");"))
- .toString());
- }
-
- @Test
- public final void testPhraseSegment() {
- assertEquals(
- "title:'c d'",
- parser.parse(
- new Parsable()
- .setQuery("select * from sources * where"
- + " [{\"segmenter\": {\"version\": \"18.47.39\", \"backend\": \"nonexistant\"}}]"
- + " (title contains ([{\"origin\": {\"offset\": 0, \"length\":3, \"original\": \"c d\"}}]"
- + " phrase(\"a\", \"b\")));"))
- .toString());
- }
-
- @Test
- public final void testPhraseInEquiv() {
- assertEquals(
- "EQUIV title:a title:'c d'",
- parser.parse(
- new Parsable()
- .setQuery("select * from sources * where"
- + " [{\"segmenter\": {\"version\": \"18.47.39\", \"backend\": \"nonexistant\"}}]"
- + " (title contains"
- + " equiv(\"a\","
- + " ([{\"origin\": {\"offset\": 0, \"length\":3, \"original\": \"c d\"}}]\"b\")"
- + ")"
- + ");"))
- .toString());
- }
-
- @Test
- public final void testPhraseSegmentToAndSegment() {
- assertEquals(
- "SAND title:c title:d",
- parser.parse(
- new Parsable()
- .setQuery("select * from sources * where"
- + " [{\"segmenter\": {\"version\": \"18.47.39\", \"backend\": \"nonexistant\"}}]"
- + " (title contains ([{\"origin\": {\"offset\": 0, \"length\":3, \"original\": \"c d\"}, \"andSegmenting\": true}]"
- + " phrase(\"a\", \"b\")));"))
- .toString());
- }
-
- @Test
- public final void testPhraseSegmentInPhrase() {
- assertEquals(
- "title:\"a 'c d'\"",
- parser.parse(
- new Parsable()
- .setQuery("select * from sources * where [{\"segmenter\": {\"version\": \"18.47.39\", \"backend\": \"nonexistant\"}}]"
- + " (title contains phrase(\"a\","
- + " ([{\"origin\": {\"offset\": 0, \"length\":3, \"original\": \"c d\"}}]"
- + " phrase(\"e\", \"f\"))));"))
- .toString());
- }
-
- @Test
- public final void testWordNoImplicitTransforms() {
- assertEquals(
- "title:a b",
- parser.parse(
- new Parsable()
- .setQuery("select * from sources * where [{\"segmenter\": {\"version\": \"18.47.39\", \"backend\": \"nonexistant\"}}] (title contains ([{\"implicitTransforms\": false}]\"a b\"));"))
- .toString());
- }
-
- @Test
- public final void testPhraseSegmentNoImplicitTransforms() {
- assertEquals(
- "title:'a b'",
- parser.parse(
- new Parsable()
- .setQuery("select * from sources * where"
- + " [{\"segmenter\": {\"version\": \"18.47.39\", \"backend\": \"nonexistant\"}}]"
- + " (title contains ([{\"origin\": {\"offset\": 0, \"length\":3, \"original\": \"c d\"}, \"implicitTransforms\": false}]"
- + " phrase(\"a\", \"b\")));"))
- .toString());
- }
-
- @Test
- public final void testPhraseSegmentToAndSegmentNoImplicitTransforms() {
- assertEquals(
- "SAND title:a title:b",
- parser.parse(
- new Parsable()
- .setQuery("select * from sources * where"
- + " [{\"segmenter\": {\"version\": \"18.47.39\", \"backend\": \"nonexistant\"}}]"
- + " (title contains ([{\"origin\": {\"offset\": 0, \"length\":3, \"original\": \"c d\"}, \"andSegmenting\": true, \"implicitTransforms\": false}]"
- + " phrase(\"a\", \"b\")));"))
- .toString());
- }
-
- @Test
- public final void testPhraseSegmentInPhraseNoImplicitTransforms() {
- assertEquals(
- "title:\"a 'e f'\"",
- parser.parse(
- new Parsable()
- .setQuery("select * from sources * where [{\"segmenter\": {\"version\": \"18.47.39\", \"backend\": \"nonexistant\"}}]"
- + " (title contains phrase(\"a\","
- + " ([{\"origin\": {\"offset\": 0, \"length\":3, \"original\": \"c d\"}, \"implicitTransforms\": false}]"
- + " phrase(\"e\", \"f\"))));"))
- .toString());
- }
-
-}
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 e2325e52f63..127820bb7ae 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
@@ -11,6 +11,7 @@ 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.PhraseSegmentItem;
import com.yahoo.prelude.query.PrefixItem;
import com.yahoo.prelude.query.QueryCanonicalizer;
import com.yahoo.prelude.query.RegExpItem;
@@ -55,15 +56,15 @@ import static org.junit.Assert.fail;
/**
* Specification for the conversion of YQL+ expressions to Vespa search queries.
*
- * @author steinar
- * @author stiankri
+ * @author Steinar Knutsen
+ * @author Stian Kristoffersen
*/
public class YqlParserTestCase {
private final YqlParser parser = new YqlParser(new ParserEnvironment());
@Test
- public void requireThatDefaultsAreSane() {
+ public void testParserDefaults() {
assertTrue(parser.isQueryParser());
assertNull(parser.getDocTypes());
}
@@ -76,7 +77,7 @@ public class YqlParserTestCase {
}
@Test
- public void requireThatGroupingStepCanBeParsed() {
+ public void testGroupingStep() {
assertParse("select foo from bar where baz contains 'cox';",
"baz:cox");
assertEquals("[]",
@@ -98,7 +99,7 @@ public class YqlParserTestCase {
}
@Test
- public void requireThatGroupingContinuationCanBeParsed() {
+ public void testGroupingContinuation() {
assertParse("select foo from bar where baz contains 'cox' " +
"| [{ 'continuations': ['BCBCBCBEBG', 'BCBKCBACBKCCK'] }]all(group(a) each(output(count())));",
"baz:cox");
@@ -320,12 +321,14 @@ public class YqlParserTestCase {
@Test
public void testRaw() {
+ // Default: Not raw, for comparison
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());
+ assertEquals("baz:'yoni jo dima'", root.toString());
+ assertFalse(root instanceof WordItem);
+ assertTrue(root instanceof PhraseSegmentItem);
root = parse("select foo from bar where baz contains ([{\"grammar\":\"raw\"}]\"yoni jo dima\");").getRoot();
+ assertEquals("baz:yoni jo dima", root.toString());
assertTrue(root instanceof WordItem);
assertFalse(root instanceof ExactStringItem);
assertEquals("yoni jo dima", ((WordItem)root).getWord());
@@ -735,44 +738,17 @@ public class YqlParserTestCase {
@Test
public void testSegmenting() {
- assertParse("select * from bar where ([{\"segmenter\": {\"version\": \"58.67.49\", \"backend\": " +
- "\"yell\"}}] title contains \"madonna\");",
- "title:madonna");
- assertEquals("yell", parser.getSegmenterBackend());
- assertEquals(new Version("58.67.49"), parser.getSegmenterVersion());
-
- assertParse("select * from bar where ([{\"segmenter\": {\"version\": \"8.7.3\", \"backend\": " +
- "\"yell\"}}]([{\"targetNumHits\": 9999438}] weakAnd(format contains \"online\", title contains " +
- "\"madonna\")));",
- "WAND(9999438) format:online title:madonna");
- assertEquals("yell", parser.getSegmenterBackend());
- assertEquals(new Version("8.7.3"), parser.getSegmenterVersion());
-
- assertParse("select * from bar where [{\"segmenter\": {\"version\": \"18.47.39\", \"backend\": " +
- "\"yell\"}}] ([{\"targetNumHits\": 99909438}] weakAnd(format contains \"online\", title contains " +
- "\"madonna\"));",
- "WAND(99909438) format:online title:madonna");
- assertEquals("yell", parser.getSegmenterBackend());
- assertEquals(new Version("18.47.39"), parser.getSegmenterVersion());
-
- assertParse("select * from bar where [{\"targetNumHits\": 99909438}] weakAnd(format contains " +
- "\"online\", title contains \"madonna\");",
- "WAND(99909438) format:online title:madonna");
- assertNull(parser.getSegmenterBackend());
- assertNull(parser.getSegmenterVersion());
-
- assertParse("select * from bar where [{\"segmenter\": {\"version\": \"58.67.49\", \"backend\": " +
- "\"yell\"}}](title contains \"madonna\") order by shoesize;",
- "title:madonna");
- assertEquals("yell", parser.getSegmenterBackend());
- assertEquals(new Version("58.67.49"), parser.getSegmenterVersion());
+ assertParse("select * from bar where title contains 'foo.bar';",
+ "title:'foo bar'");
+
+ assertParse("select * from bar where title contains 'foo&123';",
+ "title:'foo 123'");
}
@Test
public void testNegativeHitLimit() {
- assertParse(
- "select * from sources * where [{\"hitLimit\": -38}]range(foo, 0, 1);",
- "foo:[0;1;-38]");
+ assertParse("select * from sources * where [{\"hitLimit\": -38}]range(foo, 0, 1);",
+ "foo:[0;1;-38]");
}
@Test
@@ -830,26 +806,26 @@ public class YqlParserTestCase {
@Test
public void testMoreInheritedAnnotations() {
- final String yqlQuery = "select * from sources * where "
- + "([{\"ranked\": false}](foo contains \"a\" "
- + "and ([{\"ranked\": true}](bar contains \"b\" "
- + "or ([{\"ranked\": false}](foo contains \"c\" "
- + "and foo contains ([{\"ranked\": true}]\"d\")))))));";
+ String yqlQuery = "select * from sources * where " +
+ "([{\"ranked\": false}](foo contains \"a\" " +
+ "and ([{\"ranked\": true}](bar contains \"b\" " +
+ "or ([{\"ranked\": false}](foo contains \"c\" " +
+ "and foo contains ([{\"ranked\": true}]\"d\")))))));";
QueryTree x = parse(yqlQuery);
List<IndexedItem> terms = QueryTree.getPositiveTerms(x);
assertEquals(4, terms.size());
for (IndexedItem term : terms) {
switch (term.getIndexedString()) {
- case "a":
- case "c":
- assertFalse(((Item) term).isRanked());
- break;
- case "b":
- case "d":
- assertTrue(((Item) term).isRanked());
- break;
- default:
- fail();
+ case "a":
+ case "c":
+ assertFalse(((Item) term).isRanked());
+ break;
+ case "b":
+ case "d":
+ assertTrue(((Item) term).isRanked());
+ break;
+ default:
+ fail();
}
}
}
@@ -921,8 +897,8 @@ public class YqlParserTestCase {
private void checkWordAlternativesContent(WordAlternativesItem alternatives) {
boolean seenTree = false;
boolean seenForest = false;
- final String forest = "trees";
- final String tree = "tree";
+ String forest = "trees";
+ String tree = "tree";
assertEquals(2, alternatives.getAlternatives().size());
for (WordAlternativesItem.Alternative alternative : alternatives.getAlternatives()) {
if (tree.equals(alternative.word)) {