@@ -1295,11 +1295,15 @@ public MsearchRequest searchMsearchRequest(
1295
1295
.timeout (timeStringMs (query .getTimeout ())) //
1296
1296
;
1297
1297
1298
- if (query .getPageable ().isPaged ()) {
1299
- bb //
1300
- .from ((int ) query .getPageable ().getOffset ()) //
1301
- .size (query .getPageable ().getPageSize ());
1302
- }
1298
+ var offset = query .getPageable ().isPaged () ? query .getPageable ().getOffset () : 0 ;
1299
+ var pageSize = query .getPageable ().isPaged () ? query .getPageable ().getPageSize ()
1300
+ : INDEX_MAX_RESULT_WINDOW ;
1301
+ // if we have both a page size and a max results, we take the min, this is necessary for
1302
+ // searchForStream to work correctly (#3098) as there the page size defines what is
1303
+ // returned in a single request, and the max result determines the total number of
1304
+ // documents returned
1305
+ var size = query .isLimiting () ? Math .min (pageSize , query .getMaxResults ()) : pageSize ;
1306
+ bb .from ((int ) offset ).size (size );
1303
1307
1304
1308
if (!isEmpty (query .getFields ())) {
1305
1309
bb .fields (fb -> {
@@ -1312,10 +1316,6 @@ public MsearchRequest searchMsearchRequest(
1312
1316
bb .storedFields (query .getStoredFields ());
1313
1317
}
1314
1318
1315
- if (query .isLimiting ()) {
1316
- bb .size (query .getMaxResults ());
1317
- }
1318
-
1319
1319
if (query .getMinScore () > 0 ) {
1320
1320
bb .minScore ((double ) query .getMinScore ());
1321
1321
}
@@ -1473,13 +1473,14 @@ private <T> void prepareSearchRequest(Query query, @Nullable String routing, @Nu
1473
1473
builder .seqNoPrimaryTerm (true );
1474
1474
}
1475
1475
1476
- if (query .getPageable ().isPaged ()) {
1477
- builder //
1478
- .from ((int ) query .getPageable ().getOffset ()) //
1479
- .size (query .getPageable ().getPageSize ());
1480
- } else {
1481
- builder .from (0 ).size (INDEX_MAX_RESULT_WINDOW );
1482
- }
1476
+ var offset = query .getPageable ().isPaged () ? query .getPageable ().getOffset () : 0 ;
1477
+ var pageSize = query .getPageable ().isPaged () ? query .getPageable ().getPageSize () : INDEX_MAX_RESULT_WINDOW ;
1478
+ // if we have both a page size and a max results, we take the min, this is necessary for
1479
+ // searchForStream to work correctly (#3098) as there the page size defines what is
1480
+ // returned in a single request, and the max result determines the total number of
1481
+ // documents returned
1482
+ var size = query .isLimiting () ? Math .min (pageSize , query .getMaxResults ()) : pageSize ;
1483
+ builder .from ((int ) offset ).size (size );
1483
1484
1484
1485
if (!isEmpty (query .getFields ())) {
1485
1486
var fieldAndFormats = query .getFields ().stream ().map (field -> FieldAndFormat .of (b -> b .field (field ))).toList ();
@@ -1494,10 +1495,6 @@ private <T> void prepareSearchRequest(Query query, @Nullable String routing, @Nu
1494
1495
addIndicesOptions (builder , query .getIndicesOptions ());
1495
1496
}
1496
1497
1497
- if (query .isLimiting ()) {
1498
- builder .size (query .getMaxResults ());
1499
- }
1500
-
1501
1498
if (query .getMinScore () > 0 ) {
1502
1499
builder .minScore ((double ) query .getMinScore ());
1503
1500
}
0 commit comments