diff options
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.java | 147 | ||||
-rw-r--r-- | container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java | 94 |
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)) { |