词项查询
编辑词项查询
编辑返回在提供的字段中包含一个或多个精确词项的文档。
terms
查询与 term
查询 相同,只是您可以搜索多个值。如果文档包含至少一个词项,则该文档将匹配。要搜索包含多个匹配词项的文档,请使用 terms_set
查询。
示例请求
编辑以下搜索返回 user.id
字段包含 kimchy
或 elkbee
的文档。
resp = client.search( query={ "terms": { "user.id": [ "kimchy", "elkbee" ], "boost": 1 } }, ) print(resp)
response = client.search( body: { query: { terms: { 'user.id' => [ 'kimchy', 'elkbee' ], boost: 1 } } } ) puts response
const response = await client.search({ query: { terms: { "user.id": ["kimchy", "elkbee"], boost: 1, }, }, }); console.log(response);
GET /_search { "query": { "terms": { "user.id": [ "kimchy", "elkbee" ], "boost": 1.0 } } }
terms
的顶层参数
编辑-
<字段>
-
(可选,对象) 您希望搜索的字段。
此参数的值是您希望在提供的字段中查找的词项数组。要返回文档,一个或多个词项必须与字段值完全匹配,包括空格和大小写。
默认情况下,Elasticsearch 将
terms
查询限制为最多 65,536 个词项。您可以使用index.max_terms_count
设置来更改此限制。要使用现有文档的字段值作为搜索词项,请使用 词项查找 参数。
-
boost
-
(可选,浮点数) 用于减少或增加查询的相关性得分的浮点数。默认为
1.0
。您可以使用
boost
参数来调整包含两个或多个查询的搜索的相关性得分。Boost 值相对于默认值
1.0
。介于0
和1.0
之间的 boost 值会降低相关性得分。大于1.0
的值会增加相关性得分。
注意事项
编辑词项查找
编辑词项查找会获取现有文档的字段值。然后,Elasticsearch 将这些值用作搜索词项。当搜索大量词项时,这很有帮助。
要运行词项查找,必须启用该字段的 _source
。您不能使用跨集群搜索在远程索引上运行词项查找。
默认情况下,Elasticsearch 将 terms
查询限制为最多 65,536 个词项。这包括使用词项查找获取的词项。您可以使用 index.max_terms_count
设置来更改此限制。
为了减少网络流量,如果可能,词项查找将从本地数据节点上的分片中获取文档的值。如果您的词项数据不大,请考虑使用在所有适用的数据节点上完全复制的单个主分片的索引,以最大程度地减少网络流量。
要执行词项查找,请使用以下参数。
词项查找参数
编辑词项查找示例
编辑要了解词项查找的工作原理,请尝试以下示例。
-
创建一个名为
color
的keyword
字段的索引。resp = client.indices.create( index="my-index-000001", mappings={ "properties": { "color": { "type": "keyword" } } }, ) print(resp)
response = client.indices.create( index: 'my-index-000001', body: { mappings: { properties: { color: { type: 'keyword' } } } } ) puts response
res, err := es.Indices.Create( "my-index-000001", es.Indices.Create.WithBody(strings.NewReader(`{ "mappings": { "properties": { "color": { "type": "keyword" } } } }`)), ) fmt.Println(res, err)
const response = await client.indices.create({ index: "my-index-000001", mappings: { properties: { color: { type: "keyword", }, }, }, }); console.log(response);
PUT my-index-000001 { "mappings": { "properties": { "color": { "type": "keyword" } } } }
-
在
color
字段中,索引 ID 为 1 且值为["blue", "green"]
的文档。resp = client.index( index="my-index-000001", id="1", document={ "color": [ "blue", "green" ] }, ) print(resp)
response = client.index( index: 'my-index-000001', id: 1, body: { color: [ 'blue', 'green' ] } ) puts response
res, err := es.Index( "my-index-000001", strings.NewReader(`{ "color": [ "blue", "green" ] }`), es.Index.WithDocumentID("1"), es.Index.WithPretty(), ) fmt.Println(res, err)
const response = await client.index({ index: "my-index-000001", id: 1, document: { color: ["blue", "green"], }, }); console.log(response);
PUT my-index-000001/_doc/1 { "color": ["blue", "green"] }
-
索引 ID 为 2 且在
color
字段中值为blue
的另一个文档。resp = client.index( index="my-index-000001", id="2", document={ "color": "blue" }, ) print(resp)
response = client.index( index: 'my-index-000001', id: 2, body: { color: 'blue' } ) puts response
res, err := es.Index( "my-index-000001", strings.NewReader(`{ "color": "blue" }`), es.Index.WithDocumentID("2"), es.Index.WithPretty(), ) fmt.Println(res, err)
const response = await client.index({ index: "my-index-000001", id: 2, document: { color: "blue", }, }); console.log(response);
PUT my-index-000001/_doc/2 { "color": "blue" }
-
使用带有词项查找参数的
terms
查询来查找包含与文档 2 相同的一个或多个词项的文档。包含pretty
参数,以便响应更易于阅读。resp = client.search( index="my-index-000001", pretty=True, query={ "terms": { "color": { "index": "my-index-000001", "id": "2", "path": "color" } } }, ) print(resp)
response = client.search( index: 'my-index-000001', pretty: true, body: { query: { terms: { color: { index: 'my-index-000001', id: '2', path: 'color' } } } } ) puts response
res, err := es.Search( es.Search.WithIndex("my-index-000001"), es.Search.WithBody(strings.NewReader(`{ "query": { "terms": { "color": { "index": "my-index-000001", "id": "2", "path": "color" } } } }`)), es.Search.WithPretty(), ) fmt.Println(res, err)
const response = await client.search({ index: "my-index-000001", pretty: "true", query: { terms: { color: { index: "my-index-000001", id: "2", path: "color", }, }, }, }); console.log(response);
GET my-index-000001/_search?pretty { "query": { "terms": { "color" : { "index" : "my-index-000001", "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-000001", "_id" : "1", "_score" : 1.0, "_source" : { "color" : [ "blue", "green" ] } }, { "_index" : "my-index-000001", "_id" : "2", "_score" : 1.0, "_source" : { "color" : "blue" } } ] } }