13.Elasticsearch 7.15 Query DSL 之 term查询、terms查询和terms set查询

term 查询

介绍

返回在提供的字段中包含精确值的文档。

可以使用term查询根据价格、产品ID或用户名等精确值查找文档。

注意:避免对text字段使用term查询。会查询不出任何结果的

例如:

GET /_search
{
  "query": {
    "term": {
      "user.id": {
        "value": "kimchy",
        "boost": 1.0
      }
    }
  }
}

term 的顶级参数

<field> (Required, object) 你希望查询的字段名.

field的二级参数

参数名描述
value(Required, string) 您希望在提供的<field>中找到的值。要返回文档,该参数必须完全匹配字段值,包括空格和大小写。
boost(Optional, float) 用于降低或提高查询相关性得分的浮点数。默认为1.0。
case_insensitive [7.10.0](Optional, Boolean) 当设置为true时,允许值与索引字段值的ASCII不区分大小写匹配。默认值为false,这意味着匹配的大小写取决于基础字段的映射。

terms查询

介绍

返回在提供的字段中包含一个或多个精确值的文档。

terms查询与term查询相同,只是您可以搜索多个值。

例如,下面的查询返回id为kimchy或者elkbee的文档

GET /_search
{
  "query": {
    "terms": {
      "user.id": [ "kimchy", "elkbee" ],
      "boost": 1.0
    }
  }
}

terms的顶级参数

参数名描述
<field>(Optional, object) 您希望搜索的字段数组. 默认情况下,Elasticsearch将terms查询的这个参数数组大小限制为最多65,536个, 您可以通过index.max_terms_count这个设置来变更。
boost(Optional, float) 用于降低或提高查询相关性得分的浮点数。默认为1.0。

terms set 查询

介绍

返回在提供的字段中包含最少数量的精确值的文档。

terms_set查询与terms查询相同,只是您可以定义返回文档所需的匹配词条的数量。例如:

  • 一个名为programming_languages的字段包含已知编程语言的列表,例如用于工作候选人的c++、java或php。可以使用terms_set查询返回至少匹配其中两种语言的文档。
  • 一个名为permissions权限字段,包含应用程序可能的用户权限列表。可以使用terms_set查询返回匹配这些权限子集的文档。

terms set的顶级参数

<field> (Required, object) 你希望查询的字段数组.

field的二级参数

参数名描述
terms(必需的,字符串数组)您希望在提供的<field>中找到的词条数组。要返回文档,词条数量(传入的数组大小)必须与字段值的数量精确匹配,包括空格和大写。
minimum_should_match_field(Optional, string) 字段名,填写的字段应该是个数字,包含返回文档所需的匹配条件的数量。
minimum_should_match_script(Optional, string) 自定义脚本,包含返回文档所需的匹配条件的数量。

例如:

#1,有如下索引
# required_matches字段,一个long字段。此字段包含返回文档所需的匹配词条的数量。
PUT /job-candidates
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "programming_languages": {
        "type": "keyword"
      },
      "required_matches": {
        "type": "long"
      }
    }
  }
}

#2,插入一个文档,这个文档必须匹配俩个词条 "c++", "java" ,都匹配的情况下才返回。
# 包含?refresh参数,这样文档就可以被立即进行搜索。
PUT /job-candidates/_doc/1?refresh
{
  "name": "Jane Smith",
  "programming_languages": [ "c++", "java" ],
  "required_matches": 2
}
#这个文档必须匹配三个词条"c++", "java","php",都匹配的情况下才返回。
PUT /job-candidates/_doc/2?refresh
{
  "name": "Jane Smith",
  "programming_languages": [ "c++", "java", "php" ],
  "required_matches": 3
}

#这个文档只要匹配三个词条"c++", "java", "javascript"中的任意一个,就会返回。
PUT /job-candidates/_doc/3?refresh
{
  "name": "Jane Smith",
  "programming_languages": [ "c++", "java", "javascript" ],
  "required_matches": 1
}

#3,例如以下查询,将会把_id为1、2、3的文档都返回。
GET /job-candidates/_search
{
  "query": {
    "terms_set": {
      "programming_languages": {
        "terms": [ "c++", "java", "php" ],
        "minimum_should_match_field": "required_matches"
      }
    }
  }
}

#4,例如以下查询,只返回_id为1、3的文档。
GET /job-candidates/_search
{
  "query": {
    "terms_set": {
      "programming_languages": {
        "terms": [ "c++", "java","javascript"],
        "minimum_should_match_field": "required_matches"
      }
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值