diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-06-13 15:26:01 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2024-06-13 15:26:01 +0200 |
commit | 044d368d87f7a382245e1673d2bcfb7e2716d736 (patch) | |
tree | 031c5a66d92ebfb9afc92e49e824e950ccbbfb44 | |
parent | 0d5bc40577e7f1abdb20a9f3a4e8a75452974286 (diff) |
No opportunism for single term queries. They are already optimal in the backend.
2 files changed, 12 insertions, 2 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/searchers/OpportunisticWeakAndSearcher.java b/container-search/src/main/java/com/yahoo/search/searchers/OpportunisticWeakAndSearcher.java index 2995b9e830e..69f81aa7529 100644 --- a/container-search/src/main/java/com/yahoo/search/searchers/OpportunisticWeakAndSearcher.java +++ b/container-search/src/main/java/com/yahoo/search/searchers/OpportunisticWeakAndSearcher.java @@ -52,7 +52,9 @@ public class OpportunisticWeakAndSearcher extends Searcher { // returns targetHits for the first WeakAndItem found, -1 if none found. static int targetHits(Item item) { if (!(item instanceof CompositeItem compositeItem)) return -1; - if (item instanceof WeakAndItem weakAndItem) return weakAndItem.getN(); + if (item instanceof WeakAndItem weakAndItem) { + return (weakAndItem.getItemCount() >= 2) ? weakAndItem.getN() : -1; + } for (int i = 0; i < compositeItem.getItemCount(); i++) { int targetHits = targetHits(compositeItem.getItem(i)); if (targetHits >= 0) return targetHits; diff --git a/container-search/src/test/java/com/yahoo/search/searchers/OpportunisticWeakAndSearcherTestCase.java b/container-search/src/test/java/com/yahoo/search/searchers/OpportunisticWeakAndSearcherTestCase.java index c099cf437f8..f41c74a4b8e 100644 --- a/container-search/src/test/java/com/yahoo/search/searchers/OpportunisticWeakAndSearcherTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/searchers/OpportunisticWeakAndSearcherTestCase.java @@ -6,6 +6,7 @@ import com.yahoo.prelude.query.AndItem; import com.yahoo.prelude.query.CompositeItem; import com.yahoo.prelude.query.Item; import com.yahoo.prelude.query.OrItem; +import com.yahoo.prelude.query.TrueItem; import com.yahoo.prelude.query.WeakAndItem; import com.yahoo.prelude.query.WordItem; import org.junit.jupiter.api.Test; @@ -22,10 +23,17 @@ public class OpportunisticWeakAndSearcherTestCase { return root; } + private static CompositeItem addItem(CompositeItem composite, Item item) { + composite.addItem(item); + return composite; + } + @Test public void requireThatWeakAndIsDetected() { assertEquals(-1, OpportunisticWeakAndSearcher.targetHits(new OrItem())); - assertEquals(33, OpportunisticWeakAndSearcher.targetHits(new WeakAndItem(33))); + assertEquals(-1, OpportunisticWeakAndSearcher.targetHits(new WeakAndItem(33))); + assertEquals(-1, OpportunisticWeakAndSearcher.targetHits(addItem(new WeakAndItem(33), new TrueItem()))); + assertEquals(33, OpportunisticWeakAndSearcher.targetHits(addItem(addItem(new WeakAndItem(33), new TrueItem()), new TrueItem()))); assertEquals(77, OpportunisticWeakAndSearcher.targetHits(buildQueryItem(new OrItem(), new WeakAndItem(77)))); assertEquals(77, OpportunisticWeakAndSearcher.targetHits(buildQueryItem(new AndItem(), new WeakAndItem(77)))); assertEquals(-1, OpportunisticWeakAndSearcher.targetHits(buildQueryItem(new OrItem(), new AndItem()))); |