@@ -1269,11 +1269,15 @@ public MsearchRequest searchMsearchRequest(
12691269 .timeout (timeStringMs (query .getTimeout ())) //
12701270 ;
12711271
1272- if (query .getPageable ().isPaged ()) {
1273- bb //
1274- .from ((int ) query .getPageable ().getOffset ()) //
1275- .size (query .getPageable ().getPageSize ());
1276- }
1272+ var offset = query .getPageable ().isPaged () ? query .getPageable ().getOffset () : 0 ;
1273+ var pageSize = query .getPageable ().isPaged () ? query .getPageable ().getPageSize ()
1274+ : INDEX_MAX_RESULT_WINDOW ;
1275+ // if we have both a page size and a max results, we take the min, this is necessary for
1276+ // searchForStream to work correctly (#3098) as there the page size defines what is
1277+ // returned in a single request, and the max result determines the total number of
1278+ // documents returned
1279+ var size = query .isLimiting () ? Math .min (pageSize , query .getMaxResults ()) : pageSize ;
1280+ bb .from ((int ) offset ).size (size );
12771281
12781282 if (!isEmpty (query .getFields ())) {
12791283 bb .fields (fb -> {
@@ -1286,10 +1290,6 @@ public MsearchRequest searchMsearchRequest(
12861290 bb .storedFields (query .getStoredFields ());
12871291 }
12881292
1289- if (query .isLimiting ()) {
1290- bb .size (query .getMaxResults ());
1291- }
1292-
12931293 if (query .getMinScore () > 0 ) {
12941294 bb .minScore ((double ) query .getMinScore ());
12951295 }
@@ -1443,13 +1443,14 @@ private <T> void prepareSearchRequest(Query query, @Nullable String routing, @Nu
14431443 builder .seqNoPrimaryTerm (true );
14441444 }
14451445
1446- if (query .getPageable ().isPaged ()) {
1447- builder //
1448- .from ((int ) query .getPageable ().getOffset ()) //
1449- .size (query .getPageable ().getPageSize ());
1450- } else {
1451- builder .from (0 ).size (INDEX_MAX_RESULT_WINDOW );
1452- }
1446+ var offset = query .getPageable ().isPaged () ? query .getPageable ().getOffset () : 0 ;
1447+ var pageSize = query .getPageable ().isPaged () ? query .getPageable ().getPageSize () : INDEX_MAX_RESULT_WINDOW ;
1448+ // if we have both a page size and a max results, we take the min, this is necessary for
1449+ // searchForStream to work correctly (#3098) as there the page size defines what is
1450+ // returned in a single request, and the max result determines the total number of
1451+ // documents returned
1452+ var size = query .isLimiting () ? Math .min (pageSize , query .getMaxResults ()) : pageSize ;
1453+ builder .from ((int ) offset ).size (size );
14531454
14541455 if (!isEmpty (query .getFields ())) {
14551456 var fieldAndFormats = query .getFields ().stream ().map (field -> FieldAndFormat .of (b -> b .field (field ))).toList ();
@@ -1464,10 +1465,6 @@ private <T> void prepareSearchRequest(Query query, @Nullable String routing, @Nu
14641465 addIndicesOptions (builder , query .getIndicesOptions ());
14651466 }
14661467
1467- if (query .isLimiting ()) {
1468- builder .size (query .getMaxResults ());
1469- }
1470-
14711468 if (query .getMinScore () > 0 ) {
14721469 builder .minScore ((double ) query .getMinScore ());
14731470 }
0 commit comments