Spring Boot中进行ES查询,使用QueryBuilders构造条件如何使用?

81 阅读2分钟

首先我们要了解什么是ES?

ES(Elasticsearch)是一个开源的分布式搜索和分析引擎,构建在Apache Lucene之上。它提供了高效、可扩展、实时的全文搜索和分析功能。

Elasticsearch具有以下特点:
  1. 分布式架构:Elasticsearch可以在多个节点间分布数据,实现水平扩展和高可用性。
  2. 实时引擎:Elasticsearch可以实时索引和查询数据,使数据变化能够立即反映在搜索结果中。
  3. 多样的查询功能:Elasticsearch支持全文搜索、词项匹配、范围查询、聚合等多种查询方式,能够满足各种复杂的搜索需求。
  4. 分布式搜索:Elasticsearch将数据分布在多个分片上,并且可以并行搜索,提高搜索速度。
  5. 多种数据类型支持:Elasticsearch支持各种数据类型,包括文本、数值、日期、地理信息等,使得可以处理各种类型的数据。
  6. 可扩展性:Elasticsearch可以通过增加节点来扩展处理能力,并且能够自动进行数据重新分布。
  7. 插件生态系统:Elasticsearch具有丰富的插件生态系统,可以扩展其功能,如Kibana(数据可视化工具)、Logstash(数据收集和处理工具)等。
通过以上特点,Elasticsearch已经被广泛应用于各种场景,如全文搜索、日志分析、实时监控等。

当我们使用ES进行查询时,构造条件应该如何选择和使用?

我们要先明确需求,根据需求来进行选择

  1. 查询所有

    Querybuilders.matchAllQuery()

  2. 查询单个

    Querybuilders.matchQuery("name","张")

  3. 查询多个字段匹配某一个值

    Querybuilders.multiMatchQuery("红","name","details")

  4. 模糊匹配

    Querybuilders.wildcardQuery("name","张")

有时会涉及到BoolQueryBuilder的复合查询

  1. 使用must方法构建(多个and使用多个must)

    boolQueryBuilder.must(Querybuilders.matchQuery("name","张"));

  2. 使用should方法构建(多个or使用多个should)

    boolQueryBuilder.should(Querybuilders.matchQuery("name","张"));

  3. 等值查询(不分词进行查询)

    boolQueryBuilder.must(Querybuilders.termQuery("name","张三"));

  4. 范围查询

    boolQueryBuilder.must(Querybuilders.rangeQuery("age").get(18).lte(35));

    按时间范围查询:

    boolQueryBuilder.must(Querybuilders.rangeQuery("time").from(开始时间).to(结束时间));

  5. 精确查询(依次匹配多个数据)

    boolQueryBuilder.must(Querybuilders.termsQuery("id","25","26"));

以上就是我在项目中常用的一些ES查询条件构造的方法!!如有遗露或者问题,欢迎指出!!大家一起进步学习!!