原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/query-dsl-term-query.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/query-dsl-term-query.html

term 查询

返回指定的字段中包含确切的词项的文档。

可以使用 term 查询根据精确的值(如价格、产品ID或用户名)来查找文档。

避免对 text 字段使用 term 查询。

默认情况下,作为分析(analysis)的一部分,Elasticsearch 会更改 text 字段的值。 这使得查找 text 字段值的精确匹配变得困难。

要搜索 text 字段的值,请使用 match 查询代替之。

请求示例

GET /_search
{
    "query": {
        "term": {
            "user": {
                "value": "Kimchy",
                "boost": 1.0
            }
        }
    }
}

term的顶级参数

<field>
(必需, object) 你想搜索的字段。

<field>的参数

value
(必需, string) 希望在指定的<field>中查找的词项。 要返回文档,词项必须与字段值完全匹配,包括空格和大写。
boost

(可选, float) 用于降低或增加查询的相关性评分的浮点数。默认为 1.0

你可以使用 boost 参数来调整包含两个或更多查询的搜索的相关性评分。

boost 值是相对于默认值 1.0 的。 其值在 01.0 之间时会降低相关性评分,而大于 1.0 时会增加相关性评分。

注意

避免在text字段上使用term查询

默认情况下,Elasticsearch 会在分析过程中更改text字段的值。 例如,默认的 standard 分析器 按如下方式更改text字段的值:

  • 删除大部分标点符号
  • 将剩余的内容分成单独的单词,称为 token(词元)
  • 把词元(token)转小写

为了更好地搜索 text 字段,match 查询还会在执行搜索之前分析你提供的搜索词。 这意味着 match 查询可以在text字段中搜索已分析的词元(token),而不是确切的词项。

term 查询分析要搜索的词。 term 查询仅搜索你提供的确切的词。 这意味着在搜索 text 字段时,term 查询可能返回很差的结果或没有结果。

要查看搜索结果的差异,请尝试以下示例。

  1. 创建一个索引,其含有一个名为full_texttext类型的字段。

    PUT my_index
    {
        "mappings" : {
            "properties" : {
                "full_text" : { "type" : "text" }
            }
        }
    }
  2. 添加并索引一个文档,其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]

  3. 使用 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 查询返回结果为空。

  4. 使用 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 字段中包含了quickbrownfox 词元的文档。

    下面是对结果中包含索引文档的 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!"
            }
          }
        ]
      }
    }