ES常用查询方式

Elasticsearch(ES)作为功能强大的检索引擎,提供了多种查询方式,在不同的场景下需要选择合适的查询方式以取得最佳查询效果。

ES常用查询方式

方式 说明
Match Query(匹配查询) 根据字段的内容进行全文匹配查询,可以使用matchmatch_allmulti_match
Term Query (精确查询) 根据字段的精确值进行查询,适用于keyword类型(直接在字段中查找条件值)或者已经执行过分词的字段(在倒排索引中查找条件值),可以使用termterms
Range Query(范围查询) 根据字段的范围值行查询,可以用来查询数字或日期范围,例如大于、小于、范围内等
Bool Query (布尔查询) 通过逻辑运算符(mustmust_notshould)组合多个查询条件,实现更复杂的查询逻辑
Match Phrase Query(短语匹配查询) 根据字段中连续的短语进行查询,适用于需要保持短语顺序的查询
Prefix Query(前缀查询) 根据字段的文本前缀进行查询,适用于需要按照前缀匹配查询的场景
Wildcard Query(通配符查询) 使用通配符模式进行查询,支持通配符符号(*和?)进行模糊匹配
Fuzzy Query(模糊查询) 根据字段中的模糊匹配进行查询,可以通过设置fuzziness参数来控制模糊程度
Nested Query(嵌套查询) 嵌套对象进行查询,即查询使用的条件本身也是查询,以便查询嵌套在文档中的相关信息
Aggregation Query(聚合查询) 用于计算、统计和分析数据,包括求和、平均值、最小值、最大值、分组等操作

除了这些常用的查询方式,还有正则表达式查询、复杂查询、地理位置查询等其他查询方式,详见官方文档,这里不再赘述(参考文献第2篇有一个列表,但可能不是最全的)。

Match查询

下面简单介绍一下最常用的match查询方式

Match查询属于全文(full text)查询,不同于Term查询,ES引擎在处理全文搜索时,首先会分析(analyze)查询字符串,然后根据分词结果构建查询,最终发返回查询结果。

匹配查询共有三种类型,分别是布尔(boolean)、短语(phrase)和短语前缀(phrase_prefix),默认的匹配查询是布尔类型,ES引擎首先分析查询字符串,使用指定的分析器对查询字符串进行分词,然后根据分词结果构建一个默认逻辑的布尔查询,例如对于以下查询:

json 复制代码
"query":{  
      "match":{  
         "name":"Steve Wang"
      }
}

查询字符串为Steve Wang,分词结果为SteveWang,查询时的逻辑是,只要name字段包含Steve或者Wang任意一个关键字,就返回该文档,等价于如下语句:

json 复制代码
{
  "query": {
    "match": {
      "name": {
        "query": "Steve Wang",
        "operator": "or",
        "minimum_should_match": 1
      }
    }
  }
}

其中operatorminimum_should_match是匹配查询的两个控制参数,通过调整operatorminimum_should_match属性值,控制匹配查询的逻辑条件,进而控制引擎返回的结果。默认情况下operator的值是or,minimum_should_match的值是1即包含任意1个关键字,视为匹配成功。也可以更改operator的为and,minimum_should_match为任意非0自然数或者百分比,表示同时匹配minimum_should_match个关键字或者匹配到的关键字占比达到多少视为匹配成功。

进一步的,如果match匹配时未进行分词(keyword类型),或者text类型但分词结果为1(此时和未分词结果相同),执行的是term查询 ,如果分词得到多个词,则执行terms查询

参考文献

  1. Elasticsearch的多种查询方式
  2. Es支持的查询方式
  3. Elasticsearch 基本使用(五)查询条件匹配方式(query & query_string)
  4. ElasticSearch查询 第四篇:匹配查询(Match)
相关推荐
java1234_小锋6 小时前
Elasticsearch是如何实现Master选举的?
大数据·elasticsearch·搜索引擎
梦幻通灵12 小时前
ES分词环境实战
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客12 小时前
Elasticsearch 中的热点以及如何使用 AutoOps 解决它们
大数据·运维·elasticsearch·搜索引擎·全文检索
小黑屋说YYDS18 小时前
ElasticSearch7.x入门教程之索引概念和基础操作(三)
elasticsearch
Java 第一深情20 小时前
Linux上安装单机版ElasticSearch6.8.1
linux·elasticsearch·全文检索
KevinAha1 天前
Elasticsearch 6.8 分析器
elasticsearch
wuxingge2 天前
elasticsearch7.10.2集群部署带认证
运维·elasticsearch
Elastic 中国社区官方博客2 天前
Elasticsearch:如何部署文本嵌入模型并将其用于语义搜索
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
Dreams°1232 天前
【大数据测试 Elasticsearch 的标准--超详细篇】
大数据·elasticsearch·jenkins
鸠摩智首席音效师2 天前
如何在 Elasticsearch 中配置 SSL / TLS ?
elasticsearch·ssl