summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-08-26 14:02:59 +0200
committerJon Bratseth <bratseth@verizonmedia.com>2019-08-26 14:02:59 +0200
commit254bdd4aff9ca67499d21ee5126c1834ebee286f (patch)
tree932b951d6811f67c471e75cdbe1bdda1bbd35664 /container-search
parent195734c17c9aec03549c50ae07418cef540ca506 (diff)
Allow segment and in phrase
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/PhraseItem.java14
-rw-r--r--container-search/src/test/java/com/yahoo/search/test/QueryTestCase.java25
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) {