@@ -1287,11 +1287,15 @@ public MsearchRequest searchMsearchRequest(
1287
1287
.timeout (timeStringMs (query .getTimeout ())) //
1288
1288
;
1289
1289
1290
- if (query .getPageable ().isPaged ()) {
1291
- bb //
1292
- .from ((int ) query .getPageable ().getOffset ()) //
1293
- .size (query .getPageable ().getPageSize ());
1294
- }
1290
+ var offset = query .getPageable ().isPaged () ? query .getPageable ().getOffset () : 0 ;
1291
+ var pageSize = query .getPageable ().isPaged () ? query .getPageable ().getPageSize ()
1292
+ : INDEX_MAX_RESULT_WINDOW ;
1293
+ // if we have both a page size and a max results, we take the min, this is necessary for
1294
+ // searchForStream to work correctly (#3098) as there the page size defines what is
1295
+ // returned in a single request, and the max result determines the total number of
1296
+ // documents returned
1297
+ var size = query .isLimiting () ? Math .min (pageSize , query .getMaxResults ()) : pageSize ;
1298
+ bb .from ((int ) offset ).size (size );
1295
1299
1296
1300
if (!isEmpty (query .getFields ())) {
1297
1301
bb .fields (fb -> {
@@ -1304,10 +1308,6 @@ public MsearchRequest searchMsearchRequest(
1304
1308
bb .storedFields (query .getStoredFields ());
1305
1309
}
1306
1310
1307
- if (query .isLimiting ()) {
1308
- bb .size (query .getMaxResults ());
1309
- }
1310
-
1311
1311
if (query .getMinScore () > 0 ) {
1312
1312
bb .minScore ((double ) query .getMinScore ());
1313
1313
}
@@ -1460,13 +1460,14 @@ private <T> void prepareSearchRequest(Query query, @Nullable String routing, @Nu
1460
1460
builder .seqNoPrimaryTerm (true );
1461
1461
}
1462
1462
1463
- if (query .getPageable ().isPaged ()) {
1464
- builder //
1465
- .from ((int ) query .getPageable ().getOffset ()) //
1466
- .size (query .getPageable ().getPageSize ());
1467
- } else {
1468
- builder .from (0 ).size (INDEX_MAX_RESULT_WINDOW );
1469
- }
1463
+ var offset = query .getPageable ().isPaged () ? query .getPageable ().getOffset () : 0 ;
1464
+ var pageSize = query .getPageable ().isPaged () ? query .getPageable ().getPageSize () : INDEX_MAX_RESULT_WINDOW ;
1465
+ // if we have both a page size and a max results, we take the min, this is necessary for
1466
+ // searchForStream to work correctly (#3098) as there the page size defines what is
1467
+ // returned in a single request, and the max result determines the total number of
1468
+ // documents returned
1469
+ var size = query .isLimiting () ? Math .min (pageSize , query .getMaxResults ()) : pageSize ;
1470
+ builder .from ((int ) offset ).size (size );
1470
1471
1471
1472
if (!isEmpty (query .getFields ())) {
1472
1473
var fieldAndFormats = query .getFields ().stream ().map (field -> FieldAndFormat .of (b -> b .field (field ))).toList ();
@@ -1481,10 +1482,6 @@ private <T> void prepareSearchRequest(Query query, @Nullable String routing, @Nu
1481
1482
addIndicesOptions (builder , query .getIndicesOptions ());
1482
1483
}
1483
1484
1484
- if (query .isLimiting ()) {
1485
- builder .size (query .getMaxResults ());
1486
- }
1487
-
1488
1485
if (query .getMinScore () > 0 ) {
1489
1486
builder .minScore ((double ) query .getMinScore ());
1490
1487
}
0 commit comments