diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2019-08-26 14:02:59 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2019-08-26 14:02:59 +0200 |
commit | 254bdd4aff9ca67499d21ee5126c1834ebee286f (patch) | |
tree | 932b951d6811f67c471e75cdbe1bdda1bbd35664 /container-search | |
parent | 195734c17c9aec03549c50ae07418cef540ca506 (diff) |
Allow segment and in phrase
Diffstat (limited to 'container-search')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/query/PhraseItem.java | 14 | ||||
-rw-r--r-- | container-search/src/test/java/com/yahoo/search/test/QueryTestCase.java | 25 |
2 files changed, 27 insertions, 12 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/PhraseItem.java b/container-search/src/main/java/com/yahoo/prelude/query/PhraseItem.java index 4de0af1f408..2d648557d9c 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/PhraseItem.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/PhraseItem.java @@ -76,15 +76,15 @@ public class PhraseItem extends CompositeIndexedItem { public void addItem(Item item) { if (item instanceof WordItem || item instanceof PhraseSegmentItem || item instanceof WordAlternativesItem) { addIndexedItem((IndexedItem) item); - } else if (item instanceof IntItem) { + } + else if (item instanceof IntItem) { addIndexedItem(convertIntToWord(item)); - } else if (item instanceof PhraseItem) { - PhraseItem phrase = (PhraseItem) item; - - for (Iterator<Item> i = phrase.getItemIterator(); i.hasNext();) { + } + else if (item instanceof PhraseItem || item instanceof AndSegmentItem) { + for (Iterator<Item> i = ((CompositeItem) item).getItemIterator(); i.hasNext();) addIndexedItem((IndexedItem) i.next()); - } - } else { + } + else { throw new IllegalArgumentException("Can not add " + item + " to a phrase"); } } diff --git a/container-search/src/test/java/com/yahoo/search/test/QueryTestCase.java b/container-search/src/test/java/com/yahoo/search/test/QueryTestCase.java index 10d2dd9efc7..fd29f2c12fe 100644 --- a/container-search/src/test/java/com/yahoo/search/test/QueryTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/test/QueryTestCase.java @@ -887,6 +887,21 @@ public class QueryTestCase { } @Test + public void testImplicitPhrase() { + Query query = new Query(httpEncode("?query=myfield:it's myfield:fine")); + + SearchDefinition test = new SearchDefinition("test"); + Index myField = new Index("myfield"); + myField.addCommand("phrase-segmenting true"); + assertTrue(myField.getPhraseSegmenting()); + test.addIndex(myField); + IndexModel indexModel = new IndexModel(test); + query.getModel().setExecution(new Execution(Execution.Context.createContextStub(new IndexFacts(indexModel)))); + + assertEquals("AND myfield:'it s' myfield:fine", query.getModel().getQueryTree().toString()); + } + + @Test public void testImplicitAnd() { Query query = new Query(httpEncode("?query=myfield:it's myfield:fine")); @@ -902,18 +917,18 @@ public class QueryTestCase { } @Test - public void testImplicitPhrase() { - Query query = new Query(httpEncode("?query=myfield:it's myfield:fine")); + public void testImplicitAndInPhrase() { + Query query = new Query(httpEncode("?query=myfield:\"it's fine\"")); SearchDefinition test = new SearchDefinition("test"); Index myField = new Index("myfield"); - myField.addCommand("phrase-segmenting true"); - assertTrue(myField.getPhraseSegmenting()); + myField.addCommand("phrase-segmenting false"); + assertFalse(myField.getPhraseSegmenting()); test.addIndex(myField); IndexModel indexModel = new IndexModel(test); query.getModel().setExecution(new Execution(Execution.Context.createContextStub(new IndexFacts(indexModel)))); - assertEquals("AND myfield:'it s' myfield:fine", query.getModel().getQueryTree().toString()); + assertEquals("myfield:\"it s fine\"", query.getModel().getQueryTree().toString()); } private void assertDetectionText(String expectedDetectionText, String queryString, String ... indexSpecs) { |