首页 > 解决方案 > elasticsearch嵌套查询,多一个对象应满足条件

问题描述

我对嵌套查询有一些疑问。这是我的例子。映射是{"user":"nested"}。存在的数据就像这样:

{
  "user": [
    {
      "first":"John",
      "last":"Smith"
    },
    {
      "first":"Alice",
      "last":"White"
    }
  ]
}

如何创建查询以查找满足所有条件的文档:

  1. user 的第一个对象,它的“first”是“John”,“last”是“Smith”;
  2. 用户的第二个对象,它的“第一个”是“Alice”,“最后一个”是“White”

标签: elasticsearchnested

解决方案


尝试以下查询:

{  
   "query":{  
      "bool":{  
         "filter":[  
            {  
               "bool":{  
                  "must":[  
                     {  
                        "bool":{  
                           "must":[  
                              {  
                                 "nested":{  
                                    "query":{  
                                       "bool":{  
                                          "must":[  
                                             {  
                                                "match_phrase":{  
                                                   "user.first":{  
                                                      "query":"John"
                                                   }
                                                }
                                             },
                                             {  
                                                "match_phrase":{  
                                                   "user.last":{  
                                                      "query":"Smith"
                                                   }
                                                }
                                             }
                                          ]
                                       }
                                    },
                                    "path":"user"
                                 }
                              },
                              {  
                                 "nested":{  
                                    "query":{  
                                       "bool":{  
                                          "must":[  
                                             {  
                                                "match_phrase":{  
                                                   "user.first":{  
                                                      "query":"Alice"
                                                   }
                                                }
                                             },
                                             {  
                                                "match_phrase":{  
                                                   "user.last":{  
                                                      "query":"White"
                                                   }
                                                }
                                             }
                                          ]
                                       }
                                    },
                                    "path":"user"
                                 }
                              }
                           ]
                        }
                     }
                  ]
               }
            }
         ]
      }
   }
}

推荐阅读