elasticsearch中的term查询

目录

  • 一、关键特性
  • 二、工作原理
  • 三、使用场景
  • 四、命令行示例

Elasticsearch 中的 term 查询是一种精确匹配查询,主要用于查找与指定精确值完全匹配的文档。

一、关键特性

  1. 精确匹配term 查询要求搜索的关键词与文档中对应字段的值完全一致,不涉及任何文本分析(如分词、大小写转换、停用词移除等)。这意味着,如果你搜索的是一个完整的词汇、短语或特定值(如整数、日期、布尔值等),Elasticsearch 将直接在索引的倒排表中查找是否存在与该值精确匹配的项。

  2. 非分词字段term 查询通常应用于未经过分词处理的字段类型,如 keywordintegerlongdateboolean 等。这些字段在索引时不会被分词器拆分成多个词项,而是作为整体存储在索引中。

  3. 区分大小写:对于区分大小写的字段(如 keyword 类型),term 查询同样区分大小写。例如,搜索 Termterm 将被视为不同的值。

  4. 效率较高:由于 term 查询直接在倒排索引中查找特定值,而不涉及复杂的文本分析和评分计算,因此其执行效率通常高于需要进行文本分析的查询类型,如 matchmulti_match 等。

二、工作原理

在 Elasticsearch 中,每个文档在索引时都会被分解成多个词项,并为每个词项建立一个倒排索引。term 查询的工作流程如下:

  1. 接收查询请求:用户提交一个 term 查询,指定要查询的字段名、要匹配的精确值以及(可选的)其他查询参数(如 Boost、Case Sensitive 等)。

  2. 查找倒排索引:Elasticsearch 根据查询参数,在目标字段的倒排索引中查找与指定精确值完全相同的词项。如果找到了匹配项,Elasticsearch 记录下包含该词项的文档 ID。

  3. 合并结果:如果有多个分片(shard)包含匹配的文档,Elasticsearch 会合并各个分片的结果集,去除重复的文档 ID,并按指定的排序规则(如有)对结果进行排序。

  4. 返回结果:Elasticsearch 返回包含匹配文档 ID 的响应,通常还包括文档得分(对于 term 查询,得分通常是 1,因为它是基于精确匹配的,不涉及复杂的评分算法)、命中总数、分页信息等。

三、使用场景

  • 精确值过滤:当需要查找具有特定值(如某个产品的唯一标识符、用户的精确年龄、特定状态码等)的文档时,使用 term 查询可以快速定位这些文档。

  • 标签、分类或枚举值的筛选:对于存储标签、类别或预定义枚举值的字段(如 categorystatuscolor 等),term 查询能够准确地筛选出具有特定标签、类别或枚举值的文档。

  • 非文本字段查询:对于非文本类型的字段,如整数、日期、布尔值等,term 查询是唯一适用的查询方式,因为这些字段的值不具备分词的性质。

  • 复合查询中的精确条件:在复杂的复合查询(如 bool 查询、filter 查询等)中,可以使用 term 查询作为精确筛选条件与其他查询类型(如全文查询、范围查询等)组合使用,以实现更精细的查询逻辑。

四、命令行示例

下面是一个使用 term 查询的命令行示例:

curl -X GET "http://localhost:9200/my_index/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "term": {
      "product_id": "ABC123"
    }
  }
}'

在这个例子中,我们向 my_index 索引发起一个搜索请求,查询条件是一个 term 查询,它要求在 product_id 字段中查找值为 “ABC123” 的文档。

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值