我使用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"?
答案 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