Skip to content

Commit 57c385c

Browse files
authored
Fix ES|QL search context creation to use correct results type (#137994)
The ES|QL search context was being created with an incorrect results type, which unintentionally disabled the inner executor in the Lucene index searcher. This hadn’t caused issues previously because parallelisation happens outside the index searcher for most queries, but KNN queries rely on the internal executor for proper parallel rewrite execution. This change ensures that the correct results type is used so KNN queries executed via ES|QL can leverage the inner executor and parallelise their rewrite phase correctly.
1 parent 1ce5c7c commit 57c385c

File tree

2 files changed

+3
-1
lines changed

2 files changed

+3
-1
lines changed

server/src/main/java/org/elasticsearch/search/SearchService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1451,7 +1451,8 @@ public SearchContext createSearchContext(ShardSearchRequest request, TimeValue t
14511451
final Engine.SearcherSupplier reader = indexShard.acquireSearcherSupplier();
14521452
final ShardSearchContextId id = new ShardSearchContextId(sessionId, idGenerator.incrementAndGet(), reader.getSearcherId());
14531453
try (ReaderContext readerContext = new ReaderContext(id, indexService, indexShard, reader, -1L, true)) {
1454-
DefaultSearchContext searchContext = createSearchContext(readerContext, request, timeout, ResultsType.NONE);
1454+
// Use ResultsType.QUERY so that the created search context can execute queries correctly.
1455+
DefaultSearchContext searchContext = createSearchContext(readerContext, request, timeout, ResultsType.QUERY);
14551456
searchContext.addReleasable(readerContext.markAsUsed(0L));
14561457
return searchContext;
14571458
}

server/src/test/java/org/elasticsearch/search/SearchServiceSingleNodeTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2001,6 +2001,7 @@ public void testCreateSearchContext() throws IOException {
20012001
clusterAlias
20022002
);
20032003
try (SearchContext searchContext = service.createSearchContext(request, new TimeValue(System.currentTimeMillis()))) {
2004+
assertTrue(searchContext.searcher().hasExecutor());
20042005
SearchShardTarget searchShardTarget = searchContext.shardTarget();
20052006
SearchExecutionContext searchExecutionContext = searchContext.getSearchExecutionContext();
20062007
String expectedIndexName = clusterAlias == null ? index : clusterAlias + ":" + index;

0 commit comments

Comments
 (0)