elasticsearch中的term查询

本文详细阐述了Elasticsearch中的term查询,包括其精确匹配特性、工作原理,适用于的场景如精确值过滤、标签筛选和非文本字段查询,以及在命令行中的使用示例。
摘要由CSDN通过智能技术生成

目录

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

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
    评论
Term查询Elasticsearch一种基本的查询方式,用于查询一个字段包含指定关键词的文档,类似于MySQL的等值查询。使用Term查询时,可以对字段进行完全匹配,且区分大小写。其基本语法如下所示: ``` GET /{index}/_search { "query": { "term": { "{field}": "{value}" } } } ``` 其,`{index}`表示查询的索引名称,`{field}`表示需要查询的字段,`{value}`表示需要匹配的值。Term查询只能用于匹配该属性的单个值,若想匹配多个值,可以使用Terms查询Terms查询的基本语法如下所示: ``` GET /{index}/_search { "query": { "terms": { "{field}": [ "{value1}", "{value2}", "{value3}" ] } } } ``` 在Java代码,可以使用`termsQuery`方法来构建Terms查询,如下所示: ```java TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("field", "value1", "value2", "value3"); searchSourceBuilder.query(termsQueryBuilder); ``` Term查询还可以配置其他参数,如超时时间等。在Java代码,可以通过设置`timeout`来指定查询超时时间,如下所示: ```java searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); ``` 以上是关于Elasticsearch Term查询的基本用法和示例代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Elaticsearch查询 -Term查询](https://blog.csdn.net/weixin_43796428/article/details/131283196)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值