@@ -1269,11 +1269,15 @@ public MsearchRequest searchMsearchRequest(
1269
1269
.timeout (timeStringMs (query .getTimeout ())) //
1270
1270
;
1271
1271
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 );
1277
1281
1278
1282
if (!isEmpty (query .getFields ())) {
1279
1283
bb .fields (fb -> {
@@ -1286,10 +1290,6 @@ public MsearchRequest searchMsearchRequest(
1286
1290
bb .storedFields (query .getStoredFields ());
1287
1291
}
1288
1292
1289
- if (query .isLimiting ()) {
1290
- bb .size (query .getMaxResults ());
1291
- }
1292
-
1293
1293
if (query .getMinScore () > 0 ) {
1294
1294
bb .minScore ((double ) query .getMinScore ());
1295
1295
}
@@ -1443,13 +1443,14 @@ private <T> void prepareSearchRequest(Query query, @Nullable String routing, @Nu
1443
1443
builder .seqNoPrimaryTerm (true );
1444
1444
}
1445
1445
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 );
1453
1454
1454
1455
if (!isEmpty (query .getFields ())) {
1455
1456
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
1464
1465
addIndicesOptions (builder , query .getIndicesOptions ());
1465
1466
}
1466
1467
1467
- if (query .isLimiting ()) {
1468
- builder .size (query .getMaxResults ());
1469
- }
1470
-
1471
1468
if (query .getMinScore () > 0 ) {
1472
1469
builder .minScore ((double ) query .getMinScore ());
1473
1470
}
0 commit comments