本地英文版地址: ../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!" } } ] } }