1.需求:查询es近3个月数据取出并进行重新推送。
问题:原使用java分页查询es。可是到1w条数据后就会自动停止无法查询1w之后的数据。
原查询方法:
/**
* @description: 查询轨迹信息
* @param billTraceSearchVo
* @param page
* @date: 2020/5/28 15:06
* @author: ss
* @return: java.util.List<cn.uce.core.elasticsearch.document.BillTraceElasticSearchDocument>
*/
public List<BillTraceElasticSearchDocument> findBillTraceInfoDoc(BillTraceSearchVo billTraceSearchVo, Page page) {
List<BillTraceElasticSearchDocument> result = new ArrayList<>();
try {
//查询请求对象
SearchRequestBuilder srb = baseQuery(BillTraceElasticSearchDocument.class);
//查询条件
//billCode in (xx,xx)
BoolQueryBuilder bqb = QueryBuilders.boolQuery();
//ID规则
//(id like 'A%' or id like 'B%')
BoolQueryBuilder bqbId = QueryBuilders.boolQuery();
//billCode in (xx,xx)
//运单批量查询条件
if (billTraceSearchVo.getBillCodeList() != null && !billTraceSearchVo.getBillCodeList().isEmpty()) {
QueryBuilder tqb = QueryBuilders.termsQuery("billCode", billTraceSearchVo.getBillCodeList());
bqb.filter(tqb);
}
//开始结束时间不为空查询
if (billTraceSearchVo.getStartTime()!=null &&billTraceSearchVo.getEndTime()!= null){
bqb.must(QueryBuilders.rangeQuery("createTime").from(billTraceSearchVo.getStartTime().longValue()).to(billTraceSearchVo.getEndTime().longValue()));
}
if (billTraceSearchVo.getIdPrefix() != null && !billTraceSearchVo.getIdPrefix().isEmpty()){
//运单前缀
bqbId.should(QueryBuilders.prefixQuery("id", billTraceSearchVo.getIdPrefix()));//运单前缀
}else {
//扫描
bqbId.should(QueryBuilders.prefixQuery("id", IdPrefixConstants.SCAN_ID_PREFIX));
//同行扫描
bqbId.should(QueryBuilders.prefixQuery("id", IdPrefixConstants.PEER_ID_PREFIX));
//签收
bqbId.should(QueryBuilders.prefixQuery("id", IdPrefixConstants.SIGN_ID_PREFIX));
}
//拼接条件billCode in (xx,xx) and (id like 'A%' or id like 'B%')
bqb.filter(bqbId);
//拼接条件deleteFlag == false
bqb.filter(QueryBuilders.termQuery("deleteFlag", false));
//操作类型不能为空
bqb.filter(QueryBuilders.existsQuery("actionType"));
//快件跟踪过滤PTP系统轨迹
BoolQueryBuilder bqbPtp = QueryBuilders.boolQuery();
bqbPtp.mustNot(QueryBuilders.rangeQuery("actionType").gte(Constants.PTP_ACTION_TYPE_MIN).lte(Constants.PTP_ACTION_TYPE_MAX));
bqb.filter(bqbPtp);
//构建分页信息
buildPage(srb, page);
//设置查询条件
srb