弹性搜索-访问列表内元素的成员

时间:2018-10-23 00:28:33

标签: elasticsearch

我对弹性搜索比较陌生,并且有一个关于访问列表内元素内部元素的问题。结构如下:

{  
   '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。预先感谢!

1 个答案:

答案 0 :(得分:0)

是的,您的match查询应该找到您想要的结果。当Elasticsearch将数组放到倒排索引中时,它会展平。有关更多信息,请查看文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html#_how_arrays_of_objects_are_flattened

  

内部object字段的数组无法正常工作。   Lucene没有内部对象的概念,因此Elasticsearch变平了   对象层次结构到一个简单的字段名称和值列表中。