ES根据日期查询数据

1 实体类写入ES

在写入ES库的时候,日期格式需要转换成ES可以识别的日期格式:

yyyy/MM/dd HH:mm:ss

然后写入ES库即可

一般是根据时间区间查询,所以如果有空字段可以设置一个默认值方便查询

  //如果结束时间为空 手动设置成2099年12月31号为结束时间
  if(ObjectUtil.isEmpty(esMedList.getEnddate())){
      esMedList.setEnddate(DateUtil.parseDate("2099-12-31"));
    }
  IndexRequest request = new IndexRequest(indexName);
  request.id(esMedList.getMedListCodg());
  request.type("_doc");
  request.source(JSONObject.toJSONString(esMedList), XContentType.JSON);
  request.opType(DocWriteRequest.OpType.CREATE);
  bulkProcessor.add(request);

 2 查询ES数据的时候

 BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
        queryBuilder.filter(QueryBuilders.rangeQuery("begndate")
                .to(DateUtil.format(feeOccuTime,dateFormat)));
        queryBuilder.filter(QueryBuilders.rangeQuery("enddate").from(DateUtil.format(feeOccuTime,dateFormat)));
        queryBuilder.must(QueryBuilders.matchQuery("drugProdname", drugProdname));

        if(chrgitmLv!=null){
            queryBuilder.filter(QueryBuilders.termQuery("chrgitmLv", chrgitmLv));
        }

        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(queryBuilder);

ES的一些搜索规则:

//4设置搜索规则   
//4.1QueryBuilders.matchAllQuery() 查询全部数据
searchSourceBuilder .query(QueryBuilders.matchAllQuery());
//4.2 QueryBuilders.termQuery :对搜索关键字不分词进行查询 精准查询
searchSourceBuilder.query(QueryBuilders.termQuery("name","张三"));
//4.2.1 termsQuery: 精准查询,一次匹配多个数据
searchSourceBuilder.query(QueryBuilders.termsQuery("id","25","24"));
//4.3 QueryBuilders.matchQuery(). 关键字分词进行查询
searchSourceBuilder.query(QueryBuilders.matchQuery("courseName","分布式课程入门").operator(Operator.AND));
//4.3.1 QueryBuilders.multiMatchQuery() 关键字匹配多个字段,可以给某一个字段设置 权重,提升的倍数。
searchSourceBuilder.query(QueryBuilders.multiMatchQuery("分布式OK", "courseName", "courseDescription").field("courseName", 10));
//4.4 时间范围搜索 .from(起始时间).to(结束时间)
searchSourceBuilder.query(QueryBuilders.must(QueryBuilders.rangeQuery("commentTime").from("2022-01-02 13:11:00").to("2022-01-02 14:11:00")));
//4.5 QueryBuilders.rangeQuery 范围查询 gte 大于等于 lte 小于等于
searchSourceBuilder.query(QueryBuilders.rangeQuery("pay").gte(1000).lte(2000));

参考:

JAVA代码实现ElasticSearch搜索(入门-进阶)(一):搜索方法、多字段查询、高亮展示_majunssz的博客-CSDN博客

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值