ES根据日期查询数据

这篇具有很好参考价值的文章主要介绍了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博客文章来源地址https://www.toymoban.com/news/detail-501778.html

到了这里,关于ES根据日期查询数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES 查询及写入优化

    ES数据区分热、温、冷三个阶段 ES索引按月滚动生成 mapping设置合理的数据类型是否需要分词 使用别名管理索引??? 1 单条写入改为多条数据写入 2 自动生成ID 3 索引刷盘时间,index.refresh_interval: 30s; 默认1s改为30s,减少刷盘频次 4 大批量数据导入时,可以把副本分片设置为

    2024年02月08日
    浏览(28)
  • MySQL根据出生日期查询年龄,以及对年龄进行分组统计

    表stu数据如下 1. 根据出生日期查询年龄 返回结果: 函数DATE():提取日期或日期/时间表达式的日期部分; 函数CURDATE():返回当前的日期; 函数TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2):计算两个日期的时间差,unit是计算时间差的单位,可以是SECOND秒、MINUTE分钟、HOUR小时、DAY天

    2024年02月11日
    浏览(52)
  • springboot+es批量新增、批量修改、根据内部id批量查询

    pom.xml配置 yml配置 EsConfig配置 ElasticSearchConfig 配置 启动类配置 //批量操作的对象 批量修改 批量新增 根据es内部id批量查询数据

    2024年02月11日
    浏览(36)
  • ElasticSearch序列 - SpringBoot整合ES:根据指定的 ids 查询

    1. ElasticSearch 根据 ids 查询文档 ① 索引文档,构造数据 ② 查询文档 id 为 1 或者 2 的文档: 我们索引文档时,文档的id为整型,为什么查询出来的文档 id为字符串类型呢?如果我们使用字符串类型的文档id查询呢? 可以看到仍然可以查询到匹配的文档。 在Elasticsearch中,文档

    2024年02月11日
    浏览(45)
  • ES Elasticsearch日期范围查询和查不出的坑

    如果字段为字符串类型,需要在字段后面加 .keyword 不加会出现查不出的问题。 查询全部,有大于2022-01-01的数据 按日期范围查询却没有查出来 字段后面加“.keyword”即可,分词问题

    2024年02月11日
    浏览(33)
  • 根据实体excel导入导出百万数据,可修改表头名称

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 所有对excel都是根据实体类进行操作 根据实体导出的excel模板展示 读取结果返回,和表格上传数据一致 也支持将已有的数据导出为表格 部分情况,表头需要为中文,可以使用注解,对表格进行标注,导

    2024年02月08日
    浏览(40)
  • MyBatis实现 Java 实体类和数据库中日期类型之间的转换(超详细)

    数据库存储的时间字段的类型是datetime Java实体类的时间字段类型是Date 需求:响应前端的时间字段格式为”yyyy-MM-dd HH:mm:ss“ 1、定义resultMap 定义 Java 对象和数据库表字段的对应关系,在 mapper.xml 文件中使用 #{属性名,jdbcType=数据库字段类型} 来进行参数传递和结果集映射,例如

    2024年02月20日
    浏览(39)
  • 配置数据写入es的时间

    1、设置es的pipeline 2、检查pipeline是否设置成功 3、在索引的setting里设置默认pipeline 这样,在数据写es时候,就会生成字段date,数据写入时间

    2024年02月22日
    浏览(27)
  • Es无法写入数据的原因分析

    原因一: ElasticSearch入“只读”模式,只允许删除。当ES数据所在目录磁盘空间使用率超过90%后,ES将修改为只读状态,所以初步判断是磁盘空间不足导致es自动关闭了索引的写功能,只能进行读取或者删除。 解决: 手动将 index.blocks.read_only_allow_delete 改成false 查看index.blocks.

    2024年02月07日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包