在多个路径上查询多个嵌套对象

srg*_*bnd 8 elasticsearch

是否可以在Elasticsearch中查询不同路径上的多个嵌套对象?我可以在一个路径上查询一个嵌套对象,但我找不到正确的语法来查询不同路径上的两个对象.

我需要使用如下逻辑查询:

{'query': {
   'bool': {
       'must': [
           'nested': {
               'path': 'Diagnosis',
               'query': {
                   'bool': {
                       'must': [{'match_phrase': {'Diagnosis.Diagnosis': {'query': "epidemia"}}}]
                   }  
               }
           },
           'nested': {
               'path': 'Demographic',
               'query': {
                   'bool': {
                       'must': [{'match_phrase': {'Demographic.Gender': {'query': "female"}}}]
                   }  
               }
           }
       ]
   }
}}
Run Code Online (Sandbox Code Playgroud)

最终目标是对我的PostgreSQL数据库数据进行非规范化(72个表,总共超过1600列),并且能够对其使用布尔查询.

srg*_*bnd 14

它工作,我错过了nested查询的大括号.正确的方法:

{'query': {
   'bool': {
       'must': [
           {'nested': {
               'path': 'Diagnosis',
               'query': {
                   'bool': {
                       'must': [{'match_phrase': {'Diagnosis.Diagnosis': {'query': "epidemia"}}}]
                   }  
               }
           }},
           {'nested': {
               'path': 'Demographic',
               'query': {
                   'bool': {
                       'must': [{'match_phrase': {'Demographic.Gender': {'query': "female"}}}]
                   }  
               }
           }}
       ]
   }
}}
Run Code Online (Sandbox Code Playgroud)

  • 语法是正确的,但是当使用具有 2 个不同路径的 inner_hits{} 时,Elastic 不会返回任何结果。使用具有两次相同路径的inner_hits,确实会返回结果.. :( (2认同)