💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# Term Query(项查询) **term query** (项查询)是查找包含在反向索引中指定的**确切项**的文档。 例如: | `POST _search` `{` `"query"``: {` `"term"` `: { ``"user"` `: ``"Kimchy"` `} ①` `}` `}` | ①在反向索引的 *user* 类型中查询确切项包含 *Kimchy* 的文档。 可以指定 *boost* 参数,用以使此**term query** (项查询)比另一个查询具有更高的相关性分数。 例如: | `GET _search` `{` `"query"``: {` `"bool"``: {` `"should"``: [` `{` `"term"``: {` `"status"``: {` `"value"``: ``"urgent"``,` `"boost"``: ``2.0` `①` `}` `}` `},` `{` `"term"``: {` `"status"``: ``"normal"`  `②` `}` `}` `]` `}` `}` `}` | ①紧急查询子句有一个 *boost 2.0*,意味着它比正常查询子句重要两倍。 ② *normal* 子句拥有默认中立的 *boost 2.0 。* **为什么 term query (项****查询)与我的文档不匹配?** 字符串字段可以是 **text**(文本类型:作为完整文本处理,如电子邮件正文)、 **keyword **(关键字:视为精确值,如电子邮件地址或邮政编码)、 **Exact values**(精确值:如数字,日期和关键字)在字段中指定的精确值添加到倒排索引中确保它可以被搜索。 然而,文本字段是被分析过的。这意味着它们的值首先通过 **[analyzer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html)**(分析器)以产生项列表,然后将其添加到倒排索引。 有很多方法可以分析文本:默认 **[standard analyzer](https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html)**(标准分析器) 删除大多数标点符号,将文本分成单个单词,并将其减少。例如,标准分析器会将字符串 “Quick Brown Fox!” 改成项 [quick,brown,fox] 。 这个分析过程使得可以在一大块全文中搜索单个单词。 **term query**(项查询)在字段的倒排索引中查找一个**确切的项**,它并不知道关于字段 **analyzer **(分析器)的任何事。这就确保在使用 **keyword **(关键字)、数字、日期等字段查找值是有用的。当查询全文字段的时候,使用 **[match query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html)** (匹配查询)来替代,它可以清楚的知道字段如何被分析的。 为了演示,尝试下面的例子。首先,创建一个索引,指定字段映射,并索引文档: | `PUT my_index` `{` `"mappings"``: {` `"my_type"``: {` `"properties"``: {` `"full_text"``: {` `"type"``:  ``"text"` `①` `},` `"exact_value"``: {` `"type"``:  ``"keyword"` `②` `}` `}` `}` `}` `}` `PUT my_index/my_type/``1` `{` `"full_text"``:   ``"Quick Foxes!"``, ③` `"exact_value"``: ``"Quick Foxes!"`  `④` `}` | ① *full_text*(全文本) 字段是 **text**(文本) 类型并且将被分析。 ② exact_value (精确值) 字段是 **keyword** (关键字)类型并且不会被分析。 ③ *full_text*(全文本)倒排索引将会包含项列表: *[quick,foxes]* 。 ④ exact_value (精确值)倒排索引将会包含精确项:*[Quick Foxes!]*。 现在,对比一下 **term query** (项查询)和 **match query** (匹配查询)的结果集: | `GET my_index/my_type/_search` `{` `"query"``: {` `"term"``: {` `"exact_value"``: ``"Quick Foxes!"` `①` `}` `}` `}` `GET my_index/my_type/_search` `{` `"query"``: {` `"term"``: {` `"full_text"``: ``"Quick Foxes!"` `②` `}` `}` `}` `GET my_index/my_type/_search` `{` `"query"``: {` `"term"``: {` `"full_text"``: ``"foxes"` `③` `}` `}` `}` `GET my_index/my_type/_search` `{` `"query"``: {` `"match"``: {` `"full_text"``: ``"Quick Foxes!"` `④` `}` `}` `}` | ① 该查询匹配到结果,是因为 *exact_value* (精确值)字段包含精确项 *Quick Foxes!* 。 ② 该查询没有匹配到结果,是因为 *full_text* (全文本)字段仅包含项 *quick* 和 *foxes* 。并不包含精确项 *Quick Foxes!* 。 ③ 项 *foxes* 通过 **term query** (项查询)匹配到 *full_text* (全文本)字段。 ④ **match query **(匹配查询)首先在 *full_text* (全文本)字段上分析查询字符串,然后查看文档是否包含 *quick* 或者 *foxes* 或者 *quick foxes* 。