aboutsummaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorArne Juul <root@screwdriver.com>2023-10-12 12:57:28 +0000
committerArne Juul <root@screwdriver.com>2023-10-13 11:23:23 +0000
commit144b845d3db5b5cf481922d57f08d8f8443ebcd9 (patch)
treeb32e07eca325992ac2330239845b7c2cbf7e3e42 /container-search
parente7d54515ca2a5eceea0bf17c5b96b969aea8c53a (diff)
adjust offset/hits if necessary to get enough input to global-phase reranking
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java15
1 files changed, 13 insertions, 2 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java b/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java
index f0222eea618..12f8cdf9852 100644
--- a/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java
@@ -244,13 +244,24 @@ public class ClusterSearcher extends Searcher {
throw new IllegalStateException("perSchemaSearch must always be called with 1 schema, got: " + restrict.size());
}
String schema = restrict.iterator().next();
- boolean useGlobalPhase = globalPhaseRanker != null;
+ int rerankCount = globalPhaseRanker != null ? globalPhaseRanker.getRerankCount(query, schema) : 0;
+ boolean useGlobalPhase = rerankCount > 0;
+ final int wantOffset = query.getOffset();
+ final int wantHits = query.getHits();
if (useGlobalPhase) {
var error = globalPhaseRanker.validateNoSorting(query, schema).orElse(null);
if (error != null) return new Result(query, error);
+ int useHits = Math.max(wantOffset + wantHits, rerankCount);
+ query.setOffset(0);
+ query.setHits(useHits);
}
Result result = searcher.search(query, execution);
- if (useGlobalPhase) globalPhaseRanker.rerankHits(query, result, schema);
+ if (useGlobalPhase) {
+ globalPhaseRanker.rerankHits(query, result, schema);
+ result.hits().trim(wantOffset, wantHits);
+ query.setOffset(wantOffset);
+ query.setHits(wantHits);
+ }
return result;
}