Skip to content

Commit 003fbc7

Browse files
authored
Adding validation for incompatibility of compound retrievers and scroll (#115106)
1 parent 332c922 commit 003fbc7

File tree

4 files changed

+23
-5
lines changed

4 files changed

+23
-5
lines changed

server/src/main/java/org/elasticsearch/search/builder/SearchSourceBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2179,7 +2179,7 @@ public ActionRequestValidationException validate(
21792179
boolean allowPartialSearchResults
21802180
) {
21812181
if (retriever() != null) {
2182-
validationException = retriever().validate(this, validationException, allowPartialSearchResults);
2182+
validationException = retriever().validate(this, validationException, isScroll, allowPartialSearchResults);
21832183
List<String> specified = new ArrayList<>();
21842184
if (subSearches().isEmpty() == false) {
21852185
specified.add(QUERY_FIELD.getPreferredName());

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,10 @@ public final void extractToSearchSourceBuilder(SearchSourceBuilder searchSourceB
176176
public ActionRequestValidationException validate(
177177
SearchSourceBuilder source,
178178
ActionRequestValidationException validationException,
179+
boolean isScroll,
179180
boolean allowPartialSearchResults
180181
) {
181-
validationException = super.validate(source, validationException, allowPartialSearchResults);
182+
validationException = super.validate(source, validationException, isScroll, allowPartialSearchResults);
182183
if (source.size() > rankWindowSize) {
183184
validationException = addValidationError(
184185
"["
@@ -194,12 +195,15 @@ public ActionRequestValidationException validate(
194195
}
195196
if (allowPartialSearchResults) {
196197
validationException = addValidationError(
197-
"cannot specify a compound retriever and [allow_partial_search_results]",
198+
"cannot specify [" + getName() + "] and [allow_partial_search_results]",
198199
validationException
199200
);
200201
}
202+
if (isScroll) {
203+
validationException = addValidationError("cannot specify [" + getName() + "] and [scroll]", validationException);
204+
}
201205
for (RetrieverSource innerRetriever : innerRetrievers) {
202-
validationException = innerRetriever.retriever().validate(source, validationException, allowPartialSearchResults);
206+
validationException = innerRetriever.retriever().validate(source, validationException, isScroll, allowPartialSearchResults);
203207
}
204208
return validationException;
205209
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ public RetrieverBuilder rewrite(QueryRewriteContext ctx) throws IOException {
239239
public ActionRequestValidationException validate(
240240
SearchSourceBuilder source,
241241
ActionRequestValidationException validationException,
242+
boolean isScroll,
242243
boolean allowPartialSearchResults
243244
) {
244245
return validationException;

server/src/test/java/org/elasticsearch/action/search/SearchRequestTests.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,10 +291,23 @@ public void testValidate() throws IOException {
291291
assertNotNull(validationErrors);
292292
assertEquals(1, validationErrors.validationErrors().size());
293293
assertEquals(
294-
"cannot specify a compound retriever and [allow_partial_search_results]",
294+
"cannot specify [test_compound_retriever_builder] and [allow_partial_search_results]",
295295
validationErrors.validationErrors().get(0)
296296
);
297297
}
298+
{
299+
// scroll and compound retriever
300+
SearchRequest searchRequest = createSearchRequest().source(
301+
new SearchSourceBuilder().retriever(new TestCompoundRetrieverBuilder(randomIntBetween(1, 10)))
302+
);
303+
searchRequest.allowPartialSearchResults(false);
304+
searchRequest.scroll(TimeValue.timeValueMinutes(1));
305+
searchRequest.requestCache(false);
306+
ActionRequestValidationException validationErrors = searchRequest.validate();
307+
assertNotNull(validationErrors);
308+
assertEquals(1, validationErrors.validationErrors().size());
309+
assertEquals("cannot specify [test_compound_retriever_builder] and [scroll]", validationErrors.validationErrors().get(0));
310+
}
298311
{
299312
// allow_partial_results and non-compound retriever
300313
SearchRequest searchRequest = createSearchRequest().source(new SearchSourceBuilder().retriever(new RetrieverBuilder() {

0 commit comments

Comments
 (0)