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)
相关推荐
武子康2 小时前
大数据-178 Elasticsearch 7.3 Java 实战:索引与文档 CRUD 全流程示例
大数据·后端·elasticsearch
摇滚侠3 小时前
ElasticSearch 教程入门到精通,核心概念,系统架构,单节点集群,故障转移,水平扩容,笔记33、34、35、36、37
笔记·elasticsearch·系统架构
摇滚侠3 小时前
ElasticSearch 教程入门到精通,部署环境,Windows 集群部署,笔记29、30
大数据·笔记·elasticsearch
摇滚侠14 小时前
ElasticSearch 教程入门到精通,文档创建查询修改删除,笔记10、11、12
笔记·elasticsearch
jason成都18 小时前
elasticsearch部署时创建用户密码
大数据·elasticsearch·jenkins
摇滚侠19 小时前
ElasticSearch 教程入门到精通,文档新增修改,文档查询删除,文档批量新增批量删除,笔记21、笔记22、笔记23
笔记·elasticsearch·搜索引擎
醇氧20 小时前
【git】 撤回一个本地提交
大数据·git·elasticsearch
Elastic 中国社区官方博客20 小时前
Elasticsearch:数据脱节如何破坏现代调查
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
摇滚侠21 小时前
ElasticSearch 教程入门到精通,JavaAPI 环境搭建,索引创建,索引查询删除,笔记18、笔记19、笔记20
大数据·笔记·elasticsearch
摇滚侠1 天前
ElasticSearch 教程入门到精通,测试工具、倒排索引、索引创建查询删除,笔记6、7、8、9
大数据·笔记·elasticsearch