ES条件分页查询与不分页处理

该代码片段展示了如何利用Elasticsearch进行分页查询和无分页查询。在分页查询中,根据日期、WMS码和物料码等条件构建BoolQuery,并对创建日期进行范围过滤,按降序排序。无分页查询时,通过CriteriaQuery匹配特定的epc值,获取所有相关数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分页查询:

if (item.getItem().getEndDate() != null) {
    item.getItem().setEndDate(item.getItem().getEndDate().plusDays(1));
}

Pageable pageable = PageRequest.of(item.getPageNo() - 1, item.getPageSize());
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
DrugManageQueryDto searchItem = item.getItem();
if(!StringUtils.isEmpty(searchItem.getWmsCode())) {
    boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("wmsCode", searchItem.getWmsCode()));
}

if(!StringUtils.isEmpty(searchItem.getMaterielCode())) {
    boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("materielCode", searchItem.getMaterielCode()));
}

if(searchItem.getStartDate() != null) {
    long startDate = searchItem.getStartDate().atStartOfDay().toInstant(ZoneOffset.of("+8")).toEpochMilli();
    boolQueryBuilder.must(rangeQuery("createDate").gte(startDate));
}

if(searchItem.getEndDate() != null) {
    long endDate = searchItem.getEndDate().atStartOfDay().toInstant(ZoneOffset.of("+8")).toEpochMilli();
    boolQueryBuilder.must(rangeQuery("createDate").lte(endDate));
}
nativeSearchQueryBuilder.withQuery(boolQueryBuilder).withSort(SortBuilders.fieldSort("createDate").order(SortOrder.DESC));
SearchQuery searchQuery = nativeSearchQueryBuilder.withPageable(pageable).build();
Page<StockOrderPickDetailEs> search = stockOrderPickDetailRepository.search(searchQuery);
PageInfos result;
if(search.getTotalElements() > 0) {
    result = new PageInfos(item.getPageNo(), item.getPageSize(), search.getTotalElements(), search.getTotalPages(), search.getContent());
} else {
    result = new PageInfos(item.getPageNo(), item.getPageSize(), 0, 0, new ArrayList<StockOrderPickDetailEs>());
}
return result;

不分页查询条件下所有的数据:

List<StockDrugCodeEs> result = new ArrayList<>();
Criteria criteria = new Criteria("epc").is(epc);
CriteriaQuery criteriaQuery = new CriteriaQuery(criteria);
CloseableIterator<StockDrugCodeEs> stockDrugCodes = elasticsearchTemplate.stream(criteriaQuery, StockDrugCodeEs.class);

while (stockDrugCodes.hasNext()) {
    result.add(stockDrugCodes.next());
}
return result;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值