我使用Elasticsearch搜索所有字段,你知道哪个字段匹配吗?

时间:2016-12-21 05:56:21

标签: elasticsearch

我使用Elasticsearch搜索所有字段,您知道哪个字段匹配吗?

PUT my_index/user/1 
{
  "first_name":    "John",
  "last_name":     "Smith",
  "date_of_birth": "1970-10-24"
}

GET my_index/_search
{
  "query": {
    "match": {
      "_all": "john 1970"
    }
  }
}

在上面的例子中," john 1970"搜索所有字段。 由于put文档匹配" first_name"和" date_of_birth",它作为结果返回。

我怎么知道它匹配" first_name"和" date_of_birth"?

1 个答案:

答案 0 :(得分:2)

问题是_all是一个字段,在索引时复制所有其他字段的所有值。具体来说,当您索引文档时,ES在概念上看到的是这一点(尽管源未被修改为包含_all并且_all本身未被存储,只是被编入索引):

{
  "first_name":    "John",
  "last_name":     "Smith",
  "date_of_birth": "1970-10-24",
  "_all": "john smith 1970 10 24"
}

因此,如果您与_all匹配,那么唯一可以匹配的字段是_all本身,则无法“反向工程”哪个字段包含哪个匹配值仅基于{{1} }。

但是,您可以使用另一项称为突出显示的功能。由于未存储_all字段,因此无法突出显示其他字段,因此您可以突出显示哪些原始字段与哪些值匹配:

_all

在回复中,您会看到类似的内容,表明{ "query": { "match": { "_all": "john 1970" } }, "highlight": { "fields": { "*": { "require_field_match": false } } } } 与查询匹配。

first_name