本地英文版地址: ../en/query-dsl-term-query.html
返回指定的字段中包含确切的词项的文档。
可以使用 term 查询根据精确的值(如价格、产品ID或用户名)来查找文档。
避免对 text 字段使用 term 查询。
默认情况下,作为分析(analysis)的一部分,Elasticsearch 会更改 text 字段的值。
这使得查找 text 字段值的精确匹配变得困难。
要搜索 text 字段的值,请使用 match 查询代替之。
-
value -
(必需, string) 希望在指定的
<field>中查找的词项。 要返回文档,词项必须与字段值完全匹配,包括空格和大写。 -
boost -
(可选, float) 用于降低或增加查询的相关性评分的浮点数。默认为
1.0。你可以使用
boost参数来调整包含两个或更多查询的搜索的相关性评分。boost值是相对于默认值1.0的。 其值在0和1.0之间时会降低相关性评分,而大于1.0时会增加相关性评分。
默认情况下,Elasticsearch 会在分析过程中更改text字段的值。
例如,默认的 standard 分析器 按如下方式更改text字段的值:
- 删除大部分标点符号
- 将剩余的内容分成单独的单词,称为 token(词元)
- 把词元(token)转小写
为了更好地搜索 text 字段,match 查询还会在执行搜索之前分析你提供的搜索词。
这意味着 match 查询可以在text字段中搜索已分析的词元(token),而不是确切的词项。
term 查询不分析要搜索的词。
term 查询仅搜索你提供的确切的词。
这意味着在搜索 text 字段时,term 查询可能返回很差的结果或没有结果。
要查看搜索结果的差异,请尝试以下示例。
-
创建一个索引,其含有一个名为
full_text的text类型的字段。PUT my_index { "mappings" : { "properties" : { "full_text" : { "type" : "text" } } } } -
添加并索引一个文档,其
full_text字段的值为Quick Brown Foxes!PUT my_index/_doc/1 { "full_text": "Quick Brown Foxes!" }因为
full_text是一个text类型的字段,Elasticsearch 在分析过程中将Quick Brown Foxes!变成了[quick, brown, fox]。 -
使用
term查询在字段full_text中搜素Quick Brown Foxes!。 包括pretty参数,这样响应更具可读性。GET my_index/_search?pretty { "query": { "term": { "full_text": "Quick Brown Foxes!" } } }因为字段
full_text不再包含 确切的 词Quick Brown Foxes!,因此term查询返回结果为空。 -
使用
match查询在字段full_text中搜素Quick Brown Foxes!。GET my_index/_search?pretty { "query": { "match": { "full_text": "Quick Brown Foxes!" } } }与
term查询不同,match查询在执行搜索前,对给定的搜索词Quick Brown Foxes!进行了分析。 然后match查询返回任何full_text字段中包含了quick、brown或fox词元的文档。下面是对结果中包含索引文档的
match查询的响应:{ "took" : 1, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 0.8630463, "hits" : [ { "_index" : "my_index", "_type" : "_doc", "_id" : "1", "_score" : 0.8630463, "_source" : { "full_text" : "Quick Brown Foxes!" } } ] } }