diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-06-09 22:31:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-06-09 22:31:44 +0200 |
commit | 0a13efef3049551299950226e461a3b275bf6962 (patch) | |
tree | 5e7737d973cee7a8d09aa51bcdb6809e7636e688 /container-search | |
parent | 2a256fc1481f8460d519ccf3d9db6ed6e59ca452 (diff) |
Support WeakAnd in QueryRewrite
Diffstat (limited to 'container-search')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java | 8 | ||||
-rw-r--r-- | container-search/src/test/java/com/yahoo/prelude/querytransform/test/QueryRewriteTestCase.java | 7 |
2 files changed, 11 insertions, 4 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java b/container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java index 09be9b3728b..bf814eef057 100644 --- a/container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java +++ b/container-search/src/main/java/com/yahoo/prelude/querytransform/QueryRewrite.java @@ -14,6 +14,7 @@ import com.yahoo.prelude.query.OrItem; import com.yahoo.prelude.query.RankItem; import com.yahoo.prelude.query.SimpleIndexedItem; import com.yahoo.prelude.query.SubstringItem; +import com.yahoo.prelude.query.WeakAndItem; import com.yahoo.search.Query; import com.yahoo.search.query.Model; import com.yahoo.search.result.Hit; @@ -26,8 +27,6 @@ public class QueryRewrite { private enum Recall { RECALLS_EVERYTHING, RECALLS_NOTHING, UNKNOWN_RECALL } - // ------------------- Start public API - /** * Optimize multiple NotItems under and or by collapsing them in to one and leaving * the positive ones behind in its place and moving itself with the original and as its positive item @@ -49,6 +48,7 @@ public class QueryRewrite { return; } Item root = query.getModel().getQueryTree().getRoot(); + if (optimizeByRestrict(root, query.getModel().getRestrict().iterator().next()) == Recall.RECALLS_NOTHING) { query.getModel().getQueryTree().setRoot(new NullItem()); } @@ -170,7 +170,7 @@ public class QueryRewrite { if ((item instanceof OrItem) || (item instanceof EquivItem)) { removeOtherNonrankedChildren(item, i); recall = Recall.RECALLS_EVERYTHING; - } else if ((item instanceof AndItem) || (item instanceof NearItem)) { + } else if ((item instanceof AndItem) || (item instanceof NearItem) || (item instanceof WeakAndItem)) { if ( ! isRanked(item.getItem(i))) { item.removeItem(i); } @@ -183,7 +183,7 @@ public class QueryRewrite { case RECALLS_NOTHING: if ((item instanceof OrItem) || (item instanceof EquivItem)) { item.removeItem(i); - } else if ((item instanceof AndItem) || (item instanceof NearItem)) { + } else if ((item instanceof AndItem) || (item instanceof NearItem) || (item instanceof WeakAndItem)) { return Recall.RECALLS_NOTHING; } else if (item instanceof RankItem) { if (i == 0) return Recall.RECALLS_NOTHING; diff --git a/container-search/src/test/java/com/yahoo/prelude/querytransform/test/QueryRewriteTestCase.java b/container-search/src/test/java/com/yahoo/prelude/querytransform/test/QueryRewriteTestCase.java index ae4c8de6c3f..626c145875c 100644 --- a/container-search/src/test/java/com/yahoo/prelude/querytransform/test/QueryRewriteTestCase.java +++ b/container-search/src/test/java/com/yahoo/prelude/querytransform/test/QueryRewriteTestCase.java @@ -25,6 +25,13 @@ import static org.junit.Assert.assertTrue; public class QueryRewriteTestCase { @Test + public void testOptimizeByRestrict() { + Query query = new Query("?query=sddocname:music"); + query.getModel().setRestrict("music"); + QueryRewrite.optimizeByRestrict(query); + } + + @Test public void requireThatOptimizeByRestrictSimplifiesORItemsThatHaveFullRecallAndDontImpactRank() { assertRewritten("sddocname:foo OR sddocname:bar OR sddocname:baz", "foo", "sddocname:foo"); assertRewritten("sddocname:foo OR sddocname:bar OR sddocname:baz", "bar", "sddocname:bar"); |