Skip to content

Commit 633771b

Browse files
committed
editing bugs but cleaning it up
1 parent 74da88c commit 633771b

File tree

3 files changed

+33
-61
lines changed

3 files changed

+33
-61
lines changed

server/src/main/java/org/elasticsearch/search/retriever/RankDocsRetrieverBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ public void extractToSearchSourceBuilder(SearchSourceBuilder searchSourceBuilder
135135
searchSourceBuilder.size(rankWindowSize);
136136
}
137137
if (sourceHasMinScore()) {
138-
searchSourceBuilder.minScore(this.minScore() == null ? Float.MIN_VALUE : this.minScore());
138+
searchSourceBuilder.minScore(effectiveMinScore);
139139
}
140140
if (searchSourceBuilder.size() + searchSourceBuilder.from() > rankDocResults.length) {
141141
searchSourceBuilder.size(Math.max(0, rankDocResults.length - searchSourceBuilder.from()));

x-pack/plugin/rank-rrf/src/main/java/org/elasticsearch/xpack/rank/linear/LinearRetrieverBuilder.java

Lines changed: 6 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@
3131
import java.util.List;
3232
import java.util.Map;
3333

34-
import static org.elasticsearch.index.query.RankDocsQueryBuilder.DEFAULT_MIN_SCORE;
35-
import static org.elasticsearch.search.retriever.CompoundRetrieverBuilder.RANK_WINDOW_SIZE_FIELD;
3634
import static org.elasticsearch.xcontent.ConstructingObjectParser.constructorArg;
3735
import static org.elasticsearch.xcontent.ConstructingObjectParser.optionalConstructorArg;
3836
import static org.elasticsearch.xpack.rank.RankRRFFeatures.LINEAR_RETRIEVER_SUPPORTED;
@@ -56,7 +54,6 @@ public final class LinearRetrieverBuilder extends CompoundRetrieverBuilder<Linea
5654

5755
private final float[] weights;
5856
private final ScoreNormalizer[] normalizers;
59-
private float minScore;
6057

6158
@SuppressWarnings("unchecked")
6259
static final ConstructingObjectParser<LinearRetrieverBuilder, RetrieverParserContext> PARSER = new ConstructingObjectParser<>(
@@ -75,7 +72,7 @@ public final class LinearRetrieverBuilder extends CompoundRetrieverBuilder<Linea
7572
normalizers[index] = component.normalizer;
7673
index++;
7774
}
78-
return new LinearRetrieverBuilder(innerRetrievers, rankWindowSize, weights, normalizers, DEFAULT_MIN_SCORE);
75+
return new LinearRetrieverBuilder(innerRetrievers, rankWindowSize, weights, normalizers);
7976
}
8077
);
8178

@@ -108,21 +105,14 @@ public static LinearRetrieverBuilder fromXContent(XContentParser parser, Retriev
108105
}
109106

110107
LinearRetrieverBuilder(List<RetrieverSource> innerRetrievers, int rankWindowSize) {
111-
this(
112-
innerRetrievers,
113-
rankWindowSize,
114-
getDefaultWeight(innerRetrievers.size()),
115-
getDefaultNormalizers(innerRetrievers.size()),
116-
DEFAULT_MIN_SCORE
117-
);
108+
this(innerRetrievers, rankWindowSize, getDefaultWeight(innerRetrievers.size()), getDefaultNormalizers(innerRetrievers.size()));
118109
}
119110

120111
public LinearRetrieverBuilder(
121112
List<RetrieverSource> innerRetrievers,
122113
int rankWindowSize,
123114
float[] weights,
124-
ScoreNormalizer[] normalizers,
125-
float minScore
115+
ScoreNormalizer[] normalizers
126116
) {
127117
super(innerRetrievers, rankWindowSize);
128118
if (weights.length != innerRetrievers.size()) {
@@ -131,17 +121,13 @@ public LinearRetrieverBuilder(
131121
if (normalizers.length != innerRetrievers.size()) {
132122
throw new IllegalArgumentException("The number of normalizers must match the number of inner retrievers");
133123
}
134-
if (minScore < 0) {
135-
throw new IllegalArgumentException("[min_score] must be greater than 0, was: " + minScore);
136-
}
137124
this.weights = weights;
138125
this.normalizers = normalizers;
139-
this.minScore = minScore;
140126
}
141127

142128
@Override
143129
protected LinearRetrieverBuilder clone(List<RetrieverSource> newChildRetrievers, List<QueryBuilder> newPreFilterQueryBuilders) {
144-
LinearRetrieverBuilder clone = new LinearRetrieverBuilder(newChildRetrievers, rankWindowSize, weights, normalizers, minScore);
130+
LinearRetrieverBuilder clone = new LinearRetrieverBuilder(newChildRetrievers, rankWindowSize, weights, normalizers);
145131
clone.preFilterQueryBuilders = newPreFilterQueryBuilders;
146132
clone.retrieverName = retrieverName;
147133
return clone;
@@ -150,7 +136,6 @@ protected LinearRetrieverBuilder clone(List<RetrieverSource> newChildRetrievers,
150136
@Override
151137
protected SearchSourceBuilder finalizeSourceBuilder(SearchSourceBuilder sourceBuilder) {
152138
sourceBuilder.trackScores(true);
153-
sourceBuilder.trackTotalHits(true);
154139
return sourceBuilder;
155140
}
156141

@@ -161,9 +146,6 @@ protected RankDoc[] combineInnerRetrieverResults(List<ScoreDoc[]> rankResults, b
161146
for (int result = 0; result < rankResults.size(); result++) {
162147
final ScoreNormalizer normalizer = normalizers[result] == null ? IdentityScoreNormalizer.INSTANCE : normalizers[result];
163148
ScoreDoc[] originalScoreDocs = rankResults.get(result);
164-
if (originalScoreDocs == null) {
165-
continue;
166-
}
167149
ScoreDoc[] normalizedScoreDocs = normalizer.normalizeScores(originalScoreDocs);
168150
for (int scoreDocIndex = 0; scoreDocIndex < normalizedScoreDocs.length; scoreDocIndex++) {
169151
LinearRankDoc rankDoc = docsToRankResults.computeIfAbsent(
@@ -193,18 +175,12 @@ protected RankDoc[] combineInnerRetrieverResults(List<ScoreDoc[]> rankResults, b
193175
// sort the results based on the final score, tiebreaker based on smaller doc id
194176
LinearRankDoc[] sortedResults = docsToRankResults.values().toArray(LinearRankDoc[]::new);
195177
Arrays.sort(sortedResults);
196-
int validCount = 0;
197-
while (validCount < sortedResults.length && sortedResults[validCount].score >= minScore) {
198-
validCount++;
199-
}
200-
// trim the results to the minimum of rankWindowSize and the number of valid results
201-
int finalSize = Math.min(rankWindowSize, validCount);
202-
LinearRankDoc[] topResults = new LinearRankDoc[finalSize];
178+
// trim the results if needed, otherwise each shard will always return `rank_window_size` results.
179+
LinearRankDoc[] topResults = new LinearRankDoc[Math.min(rankWindowSize, sortedResults.length)];
203180
for (int rank = 0; rank < topResults.length; ++rank) {
204181
topResults[rank] = sortedResults[rank];
205182
topResults[rank].rank = rank + 1;
206183
}
207-
208184
return topResults;
209185
}
210186

@@ -228,17 +204,5 @@ public void doToXContent(XContentBuilder builder, Params params) throws IOExcept
228204
builder.endArray();
229205
}
230206
builder.field(RANK_WINDOW_SIZE_FIELD.getPreferredName(), rankWindowSize);
231-
builder.field(MIN_SCORE_FIELD.getPreferredName(), minScore);
232-
}
233-
234-
@Override
235-
public Float minScore() {
236-
return minScore;
237-
}
238-
239-
@Override
240-
public RetrieverBuilder minScore(Float minScore) {
241-
this.minScore = minScore != null ? minScore : DEFAULT_MIN_SCORE;
242-
return this;
243207
}
244208
}

x-pack/plugin/rank-rrf/src/yamlRestTest/resources/rest-api-spec/test/linear/10_linear_retriever.yml

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,9 +1060,9 @@ setup:
10601060
- match: { hits.total.value: 3 }
10611061
- length: {hits.hits: 2}
10621062
- match: { hits.hits.0._id: "2" }
1063-
- close_to: { hits.hits.0._score: { value: 10.5, error: 0.001 } }
1063+
- close_to: { hits.hits.0._score: { value: 1.5, error: 0.001 } }
10641064
- match: { hits.hits.1._id: "1" }
1065-
- match: { hits.hits.1._score: 10 }
1065+
- close_to: { hits.hits.1._score: { value: 1.0, error: 0.001 } }
10661066

10671067
---
10681068
"linear retriever with min_score filtering":
@@ -1103,9 +1103,9 @@ setup:
11031103
size: 10
11041104

11051105
- match: { hits.total.value: 4 }
1106-
- length: { hits.hits: 2 }
1106+
- length: { hits.hits: 1 }
11071107
- match: { hits.hits.0._id: "1" }
1108-
- close_to: { hits.hits.0._score: { value: 3.4, error: 0.5 } }
1108+
- close_to: { hits.hits.0._score: { value: 3.0, error: 0.01 } }
11091109

11101110
---
11111111
"linear retriever with default min_score":
@@ -1226,6 +1226,9 @@ setup:
12261226
min_score: 0.0
12271227
size: 10
12281228

1229+
- match: { hits.total.value: 4 }
1230+
- length: { hits.hits: 4 }
1231+
12291232
---
12301233
"linear retriever with min_score should filter documents even with filters":
12311234
- do:
@@ -1235,20 +1238,25 @@ setup:
12351238
retriever:
12361239
linear:
12371240
retrievers:
1238-
- standard:
1239-
query:
1240-
term:
1241-
text: "term"
1242-
- standard:
1243-
query:
1244-
term:
1245-
topic: "technology"
1246-
- standard:
1247-
query:
1248-
range:
1249-
price:
1250-
gte: 100
1251-
weights: [1.0, 1.0, 0.5]
1241+
- retriever:
1242+
standard:
1243+
query:
1244+
term:
1245+
text: "term"
1246+
weight: 1.0
1247+
- retriever:
1248+
standard:
1249+
query:
1250+
term:
1251+
topic: "technology"
1252+
weight: 1.0
1253+
- retriever:
1254+
standard:
1255+
query:
1256+
range:
1257+
price:
1258+
gte: 100
1259+
weight: 0.5
12521260
min_score: 0.5
12531261
- match: { hits.total.value: 2 }
12541262
- match: { hits.hits.0._id: "doc_1" }

0 commit comments

Comments
 (0)