aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-06-13 15:26:01 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2024-06-13 15:26:01 +0200
commit044d368d87f7a382245e1673d2bcfb7e2716d736 (patch)
tree031c5a66d92ebfb9afc92e49e824e950ccbbfb44
parent0d5bc40577e7f1abdb20a9f3a4e8a75452974286 (diff)
No opportunism for single term queries. They are already optimal in the backend.
-rw-r--r--container-search/src/main/java/com/yahoo/search/searchers/OpportunisticWeakAndSearcher.java4
-rw-r--r--container-search/src/test/java/com/yahoo/search/searchers/OpportunisticWeakAndSearcherTestCase.java10
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())));