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"
}
}
}
}