elasticSearch父子文档同时匹配条件

假设有酒店和房间,是父子文档

查询酒店(只返回父文档)(查询店铺名称中带”客栈“,房间名称带有“小虫子”的{店铺})

POST bnb_home/_search

{
    "query": {
      "bool":{
        "must":[
          {"match":{"data.shopName":"客栈"}},
          {
              "has_child" : {
                  "type" : "room",
                  "query" : {
                    "bool":{
                      "must":[
                        {"match":{"data.roomName":"小虫子"}}
                      ]
                    }
                  }
              }
          }
        ]
      }
    }
}

如果要对子文档的数量进行筛选,则使用 min_children ,以及 max_children 进行筛选。

如果希望对子文档进行更高的评分,可以使用:score_mode : max

查询酒店房间(只返回子文档)(查询店铺名称中带”客栈“,房间名称带有“小虫”的{房间})

POST bnb_home/_search

{
    "query": {
      "bool":{
        "must":[
          {"match":{"data.roomName":"小虫"}},
          {
              "has_parent" : {
                  "parent_type" : "shop",
                  "query" : {
                    "bool":{
                      "must":[
                          {"match":{"data.shopName":"客栈"}}
                      ]
                    }
                  }
              }
          }
        ]
      }
    }
}

如果希望同时返回,则带参数 inner_hits 。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注