diff options
author | Arne Juul <root@screwdriver.com> | 2023-10-12 12:57:28 +0000 |
---|---|---|
committer | Arne Juul <root@screwdriver.com> | 2023-10-13 11:23:23 +0000 |
commit | 144b845d3db5b5cf481922d57f08d8f8443ebcd9 (patch) | |
tree | b32e07eca325992ac2330239845b7c2cbf7e3e42 /container-search | |
parent | e7d54515ca2a5eceea0bf17c5b96b969aea8c53a (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.java | 15 |
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; } |