未排单管理-创建排单es查询优化

This commit is contained in:
gaoqr
2025-06-19 17:54:36 +08:00
parent 63a06c8515
commit fb253a1b46
@@ -825,13 +825,13 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
long total = totalResponse.count(); long total = totalResponse.count();
// 分页查询 // 分页查询
int pageNum = PageUtil.totalPage(total, 2000); int pageNum = PageUtil.totalPage(total, 500);
FieldValue searchAfterSortId = FieldValue.of(1); List<FieldValue> searchAfterSortValues = null;
for (int page = 1; page <= pageNum; page++) { for (int page = 1; page <= pageNum; page++) {
SearchRequest.Builder searchBuilder = new SearchRequest.Builder() SearchRequest.Builder searchBuilder = new SearchRequest.Builder()
.index(ORDER_PLATE_MODEL.getIndex()) .index(ORDER_PLATE_MODEL.getIndex())
.size(2000) .size(500)
.sort(s -> s.field(f -> f.field("id.keyword").order(SortOrder.Asc))) .sort(s -> s.field(f -> f.field("id.keyword").order(SortOrder.Asc)))
.query(q -> q.bool(b -> b .query(q -> q.bool(b -> b
.filter(f -> f.terms(t -> t.field("orderId").terms(e -> e.value(orderIds.stream().map(FieldValue::of).toList())))) .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)); .trackTotalHits(t -> t.enabled(false));
searchBuilder.searchAfter(searchAfterSortId); // 设置 search_after,非第一页时才需要
if (searchAfterSortValues != null) {
searchBuilder.searchAfter(searchAfterSortValues);
}
SearchResponse<OrderModelDO> response = elasticsearchClient.search(searchBuilder.build(), OrderModelDO.class); SearchResponse<OrderModelDO> response = elasticsearchClient.search(searchBuilder.build(), OrderModelDO.class);
@@ -853,17 +856,16 @@ public class OptimizePlanServiceImpl implements OptimizePlanService {
results.add(hit.source()); results.add(hit.source());
} }
// 取最后一个命中文档的 id 作为下一页的 search_after 值 // 如果没有更多结果,终止循环
if (!hits.isEmpty()) { if (hits.isEmpty()) {
OrderModelDO lastDoc = hits.get(hits.size() - 1).source(); break;
if (lastDoc != null) { }
searchAfterSortId = FieldValue.of(lastDoc.getId());
} else { // 获取最后一条记录的 sort 值,用于下一页的 search_after
// 没有更多数据了 searchAfterSortValues = hits.get(hits.size() - 1).sort();
break;
} // 防止 sort 信息缺失导致死循环
} else { if (searchAfterSortValues == null || searchAfterSortValues.isEmpty()) {
// 已经到最后一页
break; break;
} }