diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-06-21 07:41:56 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2024-06-21 07:41:56 +0200 |
commit | 610115d0aefd3f9beb94b10276888a8bf3382583 (patch) | |
tree | 0f9eb5f61d6b3d035a9ee205f7c71aebc8e8e9c3 /container-search/src/main/java/com/yahoo/search | |
parent | f7c3c4d019522ebc4b46e51e19472959c5039058 (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.java | 15 |
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; |