Term 精确查询

Term 精确查询 #

使用 term 查询在字段中搜索确切的词项。例如,以下查询搜索包含确切的行号的行:

GET shakespeare/_search
{
  "query": {
    "term": {
      "line_id": {
        "value": "61809"
      }
    }
  }
}

当文档被索引时, text 字段会被分词。分词包括对文本进行分词和转换为小写,并移除标点符号。与分词查询文本的 match 查询不同, term 查询仅匹配确切的词项,因此可能不会返回具有相关性的结果。避免在 text 字段上使用 term 查询。更多信息,请参阅精确查询与全文检索的对比。

您可以在 case_insensitive 参数中指定查询应不区分大小写:

GET shakespeare/_search
{
  "query": {
    "term": {
      "speaker": {
        "value": "HAMLET",
        "case_insensitive": true
      }
    }
  }
}

返回内容包含匹配的文档,无论大小写是否有差异:

"hits": {
  "total": {
    "value": 1582,
    "relation": "eq"
  },
  "max_score": 2,
  "hits": [
    {
      "_index": "shakespeare",
      "_id": "32700",
      "_score": 2,
      "_source": {
        "type": "line",
        "line_id": 32701,
        "play_name": "Hamlet",
        "speech_number": 9,
        "line_number": "1.2.66",
        "speaker": "HAMLET",
        "text_entry": "[Aside]  A little more than kin, and less than kind."
      }
    },
  ...
}

参数说明 #

查询接受字段名称( <field> )作为顶级参数:

GET _search
{
  "query": {
    "term": {
      "<field>": {
        "value": "sample",
        ...
      }
    }
  }
}

<field> 接受以下参数。除 value 外,所有参数都是可选的。

参数数据类型描述
valueString要在 <field> 中指定的字段中搜索的词项。只有当文档的字段值与词项完全匹配(包括正确的空格和大小写)时,该文档才会出现在结果中。
boostFloat一个浮点数值,用于指定该字段对相关性分数的权重。大于 1.0 的值会增加字段的权重。介于 0.0 和 1.0 之间的值会降低字段的权重。默认值为 1.0。
_nameString查询标签的查询名称。可选。
case_insensitiveBoolean如果为 true ,允许将值与索引字段的值进行不区分大小写的匹配。默认为 false (大小写敏感性由字段的映射决定)。