Skip to content

Commit e9a8efe

Browse files
authored
Retrievers - Fix rank_window_size validation (#128108)
1 parent d1ad917 commit e9a8efe

File tree

6 files changed

+56
-12
lines changed

6 files changed

+56
-12
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,13 @@ public ActionRequestValidationException validate(
247247
if (isScroll) {
248248
validationException = addValidationError("cannot specify [" + getName() + "] and [scroll]", validationException);
249249
}
250+
if (rankWindowSize < 0) {
251+
validationException = addValidationError(
252+
"[" + getRankWindowSizeField().getPreferredName() + "] parameter cannot be negative, found [" + rankWindowSize + "]",
253+
validationException
254+
);
255+
}
256+
250257
for (RetrieverSource innerRetriever : innerRetrievers) {
251258
validationException = innerRetriever.retriever().validate(source, validationException, isScroll, allowPartialSearchResults);
252259
if (innerRetriever.retriever() instanceof CompoundRetrieverBuilder<?> compoundChild) {
@@ -279,6 +286,10 @@ public int doHashCode() {
279286
return Objects.hash(innerRetrievers);
280287
}
281288

289+
public int rankWindowSize() {
290+
return rankWindowSize;
291+
}
292+
282293
protected final SearchSourceBuilder createSearchSourceBuilder(PointInTimeBuilder pit, RetrieverBuilder retrieverBuilder) {
283294
var sourceBuilder = new SearchSourceBuilder().pointInTimeBuilder(pit)
284295
.trackTotalHits(false)

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,15 @@
1919
* retrievers can be added individually with additional functionality.
2020
*/
2121
public class RetrieversFeatures implements FeatureSpecification {
22+
public static final NodeFeature NEGATIVE_RANK_WINDOW_SIZE_FIX = new NodeFeature("retriever.negative_rank_window_size_fix");
2223

2324
@Override
2425
public Set<NodeFeature> getFeatures() {
2526
return Set.of();
2627
}
28+
29+
@Override
30+
public Set<NodeFeature> getTestFeatures() {
31+
return Set.of(NEGATIVE_RANK_WINDOW_SIZE_FIX);
32+
}
2733
}

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/rules/retriever/QueryRuleRetrieverBuilder.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,6 @@ public String getName() {
119119
return NAME;
120120
}
121121

122-
public int rankWindowSize() {
123-
return rankWindowSize;
124-
}
125-
126122
@Override
127123
protected SearchSourceBuilder finalizeSourceBuilder(SearchSourceBuilder source) {
128124
checkValidSort(source.sorts());

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/rank/textsimilarity/TextSimilarityRankRetrieverBuilder.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,6 @@ public String inferenceId() {
193193
return inferenceId;
194194
}
195195

196-
public int rankWindowSize() {
197-
return rankWindowSize;
198-
}
199-
200196
public boolean failuresAllowed() {
201197
return failuresAllowed;
202198
}

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

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,3 +1063,42 @@ setup:
10631063
- close_to: { hits.hits.0._score: { value: 10.5, error: 0.001 } }
10641064
- match: { hits.hits.1._id: "1" }
10651065
- match: { hits.hits.1._score: 10 }
1066+
1067+
---
1068+
"should throw when rank_window_size is negative":
1069+
- requires:
1070+
cluster_features: [ "retriever.negative_rank_window_size_fix" ]
1071+
reason: "Fix for negative rank_window_size error message"
1072+
- do:
1073+
catch: /\[rank_window_size\] parameter cannot be negative, found \[-10\]/
1074+
search:
1075+
index: test
1076+
body:
1077+
retriever:
1078+
linear:
1079+
retrievers: [
1080+
{
1081+
retriever: {
1082+
standard: {
1083+
query: {
1084+
match_all: { }
1085+
}
1086+
}
1087+
},
1088+
weight: 10.0,
1089+
normalizer: "minmax"
1090+
},
1091+
{
1092+
retriever: {
1093+
knn: {
1094+
field: "vector",
1095+
query_vector: [ 4 ],
1096+
k: 1,
1097+
num_candidates: 1
1098+
}
1099+
},
1100+
weight: 2.0
1101+
}
1102+
]
1103+
rank_window_size: -10
1104+
- match: { status: 400 }

x-pack/plugin/search-business-rules/src/main/java/org/elasticsearch/xpack/searchbusinessrules/retriever/PinnedRetrieverBuilder.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,6 @@ public String getName() {
151151
return NAME;
152152
}
153153

154-
public int rankWindowSize() {
155-
return rankWindowSize;
156-
}
157-
158154
/**
159155
* Creates a PinnedQueryBuilder with the appropriate pinned documents.
160156
*

0 commit comments

Comments
 (0)