我对弹性搜索比较陌生,并且有一个关于访问列表内元素内部元素的问题。结构如下:
{
'TestA':'1',
'TestB':{
'TestC':'2',
'TestD':[
{
'TestE':'3',
'TestF':'4'
},
{
'TestE':'5',
'TestF':'6'
}
]
}
}
使用以下结构,我想返回查询中TestF
的值为6
的所有结果。我想知道下面的模板是否可行。
{
"query":{
"bool":{
"must":[
{
"match":{
"TestB.TestD.TestF":'6'
}
}
]
}
}
}
{"match" : { "TestB.TestD.TestF": '6'}}
是否能够搜索'TestD'的每个元素,还是需要使用其他命令来遍历列表?这是弹性搜索5.0。预先感谢!
答案 0 :(得分:0)
是的,您的match
查询应该找到您想要的结果。当Elasticsearch将数组放到倒排索引中时,它会展平。有关更多信息,请查看文档:
https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html#_how_arrays_of_objects_are_flattened
内部
object
字段的数组无法正常工作。 Lucene没有内部对象的概念,因此Elasticsearch变平了 对象层次结构到一个简单的字段名称和值列表中。