Skip to content

Commit 04dd492

Browse files
committed
CCS: Disable minimizing round-trips when dfs is requested (#40044)
When using DFS_QUERY_THEN_FETCH search type, the dfs phase is run and its results are used in the query phase to make scoring accurate. When using CCS, depending on whether the DFS phase runs in the CCS coordinating node (like if all shards were local) or in each remote cluster (when minimizing round-trips), scoring will differ. This commit disables minimizing round-trips whenever DFS is requested, as it is not currently possible to ensure that scoring is accurate in that case. Relates to #32125
1 parent c4fcf0b commit 04dd492

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
import java.util.function.Function;
8181
import java.util.function.LongSupplier;
8282

83+
import static org.elasticsearch.action.search.SearchType.DFS_QUERY_THEN_FETCH;
8384
import static org.elasticsearch.action.search.SearchType.QUERY_THEN_FETCH;
8485

8586
public class TransportSearchAction extends HandledTransportAction<SearchRequest, SearchResponse> {
@@ -248,6 +249,9 @@ static boolean shouldMinimizeRoundtrips(SearchRequest searchRequest) {
248249
if (searchRequest.scroll() != null) {
249250
return false;
250251
}
252+
if (searchRequest.searchType() == DFS_QUERY_THEN_FETCH) {
253+
return false;
254+
}
251255
SearchSourceBuilder source = searchRequest.source();
252256
return source == null || source.collapse() == null || source.collapse().getInnerHits() == null ||
253257
source.collapse().getInnerHits().isEmpty();

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -805,6 +805,11 @@ public void testShouldMinimizeRoundtrips() throws Exception {
805805
collapseBuilder.setInnerHits(new InnerHitBuilder("inner"));
806806
assertFalse(TransportSearchAction.shouldMinimizeRoundtrips(searchRequest));
807807
}
808+
{
809+
SearchRequest searchRequest = new SearchRequest();
810+
searchRequest.searchType(SearchType.DFS_QUERY_THEN_FETCH);
811+
assertFalse(TransportSearchAction.shouldMinimizeRoundtrips(searchRequest));
812+
}
808813
{
809814
SearchRequestTests searchRequestTests = new SearchRequestTests();
810815
searchRequestTests.setUp();

0 commit comments

Comments
 (0)