ES查询问题

1、日期查询问题
在使用restHighLevelClient进行日期时间查询的时候,发现返回结果不对,好像把查询条件前8小时的数据查出来了。原来是时区不对。因为es默认时区是UTC,所以在查询的时间要把日期时间类型转成UTC格式进行查询。
String lsType = param.getString(CommonConstants.LS_TYPE);
String submitTimeStart = param.getString(CommonConstants.SUBMIT_TIME_START);
String submitTimeEnd = param.getString(CommonConstants.SUBMIT_TIME_END);
Instant beginTime = DateUtils.getLocalDateTime(submitTimeStart).toInstant(ZoneOffset.UTC);
Instant endTime = DateUtils.getLocalDateTime(submitTimeEnd).toInstant(ZoneOffset.UTC);

// 条件构造
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
boolQueryBuilder.must(QueryBuilders.termQuery(CommonConstants.LS_TYPE + StringPoolConstant.DOT + CommonConstants.KEY_WORD, lsType));
List<String> statusList = Arrays.asList(OrderStatusEnum.ACCEPT.getCode(),OrderStatusEnum.CANCEL.getCode(),OrderStatusEnum.WAITING_ACCEPT.getCode());
boolQueryBuilder.must(QueryBuilders.termsQuery(CommonConstants.STATUS + StringPoolConstant.DOT + CommonConstants.KEY_WORD, statusList));
boolQueryBuilder.must(QueryBuilders.rangeQuery(CommonConstants.SUBMIT_TIME).gte(beginTime).lte(endTime));

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(boolQueryBuilder);
SearchRequest searchRequest = new SearchRequest(CommonConstants.ORDER);
searchRequest.source(searchSourceBuilder);
// 分页,不做高亮显示
List<JSONObject> objectList = esOperator.search(CommonConstants.ORDER, searchRequest, JSONObject.class);

2、多条件模糊匹配

 BoolQueryBuilder shouldBuilder = new BoolQueryBuilder();
    shouldBuilder.should(new WildcardQueryBuilder(CommonConstants.ORDER_CODE + ".keyword", fuzzyCode));
    shouldBuilder.should(new WildcardQueryBuilder(CommonConstants.LOGISTIC_SERVICE_NAME + ".keyword", fuzzyCode));
    shouldBuilder.should(new WildcardQueryBuilder(CommonConstants.LABORATORY_NAME + ".keyword", fuzzyCode));
    boolQueryBuilder.must(shouldBuilder);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值