本地英文版地址: ../en/query-dsl-terms-query.html
返回指定的字段中包含一个或多个确切的词的文档。
除了可以搜索多个值,terms
查询和 term
查询一样。
下面这个搜索返回 user
字段包含kimchy
或elasticsearch
的文档。
GET /_search { "query" : { "terms" : { "user" : ["kimchy", "elasticsearch"], "boost" : 1.0 } } }
-
<field>
-
(可选, object) 你想搜索的字段。
该参数的值是你想在指定的字段中查找的一组词。 要返回文档,一个或多个词必须与字段值精确匹配,包括空格和大写。
默认情况下,Elasticsearch 将
terms
查询限制为最多 65,536 个词。 可以使用index.max_terms_count
设置来更改此限制。要将现有文档的字段的值用作搜索词,请使用词项查找(terms lookup)参数。
-
boost
-
(可选, float) 用于降低或增加查询的相关性评分的浮点数。默认为
1.0
。你可以使用
boost
参数来调整包含两个或更多查询的搜索的相关性评分。boost
值是相对于默认值1.0
的。 其值在0
和1.0
之间时会降低相关性评分,而大于1.0
时会增加相关性评分。
词项查找获取现有文档的字段值。 然后,Elasticsearch 使用这些值作为搜索词。 这在搜索大量词项时会很有帮助。
因为词项查找从文档中获取值,所以必须启用 _source
映射字段才能使用词项查找。
_source
字段默认是启用的。
默认情况下,Elasticsearch 将 terms
查询限制为最多 65,536 个词。
这包括了使用词项查找获取的词项。
可以使用index.max_terms_count
设置来更改此限制。
若要执行词项查找,请使用以下参数。
要了解词项查找的工作原理,请尝试以下示例。
-
创建一个索引,其有一个名为
color
、类型为keyword
的字段。PUT my_index { "mappings" : { "properties" : { "color" : { "type" : "keyword" } } } }
-
添加并索引一个文档,其 id 为 1,字段
color
的值为["blue", "green"]
。PUT my_index/_doc/1 { "color": ["blue", "green"] }
-
添加并索引另一个文档,其 id 为 2,字段
color
的值为blue
。PUT my_index/_doc/2 { "color": "blue" }
-
使用带词项查找参数的
terms
查询去查找包含与文档 2 中的一个或多个词项相同的文档。 包括pretty
参数,这样响应更具可读性。GET my_index/_search?pretty { "query": { "terms": { "color" : { "index" : "my_index", "id" : "2", "path" : "color" } } } }
因为文档 2 和文档 1 在
color
字段中都包含blue
,所以 Elasticsearch 返回了这两个文档。{ "took" : 17, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "my_index", "_type" : "_doc", "_id" : "1", "_score" : 1.0, "_source" : { "color" : [ "blue", "green" ] } }, { "_index" : "my_index", "_type" : "_doc", "_id" : "2", "_score" : 1.0, "_source" : { "color" : "blue" } } ] } }