Elasticsearch 使用java分页查询条数超过1w的解决办法 -scroll_id方式

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
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值