aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-06-21 07:41:56 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2024-06-21 07:41:56 +0200
commit610115d0aefd3f9beb94b10276888a8bf3382583 (patch)
tree0f9eb5f61d6b3d035a9ee205f7c71aebc8e8e9c3 /container-search/src/main/java/com/yahoo/search
parentf7c3c4d019522ebc4b46e51e19472959c5039058 (diff)
If hits has been set higher than default weakand targethits, adjust all weakand with not explicit set heap size up to hits.
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/searchers/OpportunisticWeakAndSearcher.java15
1 files changed, 15 insertions, 0 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 c56b161edeb..1833df4631e 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
@@ -32,6 +32,9 @@ public class OpportunisticWeakAndSearcher extends Searcher {
@Override
public Result search(Query query, Execution execution) {
+ if (query.getHits() > WeakAndItem.defaultN) {
+ adjustWeakAndHeap(query.getModel().getQueryTree().getRoot(), query.getHits());
+ }
if (!query.properties().getBoolean(OPPORTUNISTIC_AND)) {
return execution.search(query);
}
@@ -52,6 +55,18 @@ public class OpportunisticWeakAndSearcher extends Searcher {
return execution.search(query);
}
+ static Item adjustWeakAndHeap(Item item, int hits) {
+ if (item instanceof WeakAndItem weakAnd && hits > weakAnd.getN() && !weakAnd.isNExplicit()) {
+ weakAnd.setN(hits);
+ }
+ if (item instanceof CompositeItem compositeItem) {
+ for (int i = 0; i < compositeItem.getItemCount(); i++) {
+ adjustWeakAndHeap(compositeItem.getItem(i), hits);
+ }
+ }
+ return item;
+ }
+
// returns targetHits for the first WeakAndItem found, -1 if none found.
static int targetHits(Item item) {
if (!(item instanceof CompositeItem compositeItem)) return -1;