ES常用查询方式

时间:2024-05-03 12:00:24

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引擎首先分析查询字符串,使用指定的分析器对查询字符串进行分词,然后根据分词结果构建一个默认逻辑的布尔查询,例如对于以下查询:

"query":{  
      "match":{  
         "name":"Steve Wang"
      }
}

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

{
  "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)