From fb253a1b462394b98366f184831111db84934744 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Thu, 19 Jun 2025 17:54:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=AA=E6=8E=92=E5=8D=95=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=8E=92=E5=8D=95es=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../optimizeplan/OptimizePlanServiceImpl.java | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java index 21da45258..e1d23c882 100644 --- a/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java +++ b/cf-module-prod-executor/cf-module-prod-executor-biz/src/main/java/com/cf/imes/module/executor/service/optimizeplan/OptimizePlanServiceImpl.java @@ -825,13 +825,13 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { long total = totalResponse.count(); // 分页查询 - int pageNum = PageUtil.totalPage(total, 2000); + int pageNum = PageUtil.totalPage(total, 500); - FieldValue searchAfterSortId = FieldValue.of(1); + List searchAfterSortValues = null; for (int page = 1; page <= pageNum; page++) { SearchRequest.Builder searchBuilder = new SearchRequest.Builder() .index(ORDER_PLATE_MODEL.getIndex()) - .size(2000) + .size(500) .sort(s -> s.field(f -> f.field("id.keyword").order(SortOrder.Asc))) .query(q -> q.bool(b -> b .filter(f -> f.terms(t -> t.field("orderId").terms(e -> e.value(orderIds.stream().map(FieldValue::of).toList())))) @@ -843,7 +843,10 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { ) .trackTotalHits(t -> t.enabled(false)); - searchBuilder.searchAfter(searchAfterSortId); + // 设置 search_after,非第一页时才需要 + if (searchAfterSortValues != null) { + searchBuilder.searchAfter(searchAfterSortValues); + } SearchResponse response = elasticsearchClient.search(searchBuilder.build(), OrderModelDO.class); @@ -853,17 +856,16 @@ public class OptimizePlanServiceImpl implements OptimizePlanService { results.add(hit.source()); } - // 取最后一个命中文档的 id 作为下一页的 search_after 值 - if (!hits.isEmpty()) { - OrderModelDO lastDoc = hits.get(hits.size() - 1).source(); - if (lastDoc != null) { - searchAfterSortId = FieldValue.of(lastDoc.getId()); - } else { - // 没有更多数据了 - break; - } - } else { - // 已经到最后一页 + // 如果没有更多结果,终止循环 + if (hits.isEmpty()) { + break; + } + + // 获取最后一条记录的 sort 值,用于下一页的 search_after + searchAfterSortValues = hits.get(hits.size() - 1).sort(); + + // 防止 sort 信息缺失导致死循环 + if (searchAfterSortValues == null || searchAfterSortValues.isEmpty()) { break; }