在弹性搜索 v6 中过滤后的空聚合

Empty aggregations after filtering in elastic search v6

我遇到了一个问题,即在我聚合的其中一个字段上添加过滤器后,桶是空的。第一个查询为我的聚合填充了桶,下面的第二个(向下滚动)没有。我不明白为什么?怎么了?

装满水桶

{
    "query":{
        "bool":{
            "filter":[
                {
                    "bool":{
                        "must":[
                            {
                                "term":{
                                    "active":true
                                }
                            },
                            {
                                "term":{
                                    "completed":true
                                }
                            }
                        ]
                    }
                }
            ]
        }
    },
    "_source":[
        "id",
        "slug",
        "profile_title",
        "name",
        "year",
        "modified",
        "last_modified_by_user",
        "created",
        "established",
        "company.name",
        "company.company",
        "company.city",
        "company.postal_code",
        "company.translations",
        "company.country.id",
        "company.country.country",
        "company.country.translations",
        "company.country_state.id",
        "company.country_state.name",
        "company.country_state.translations",
        "description",
        "profile_images",
        "profile_category_id",
        "employee_number",
        "primary_profile_category.name",
        "primary_profile_category.translations",
        "project_count",
        "award_count",
        "exhibition_count",
        "employee_count",
        "publication_count",
        "competition_count",
        "keywords",
        "meta_description",
        "domains.id",
        "profile_categories",
        "company.company_branches.company",
        "company.company_branches.city",
        "company.company_branches.id",
        "company.company_branches.country_state.id",
        "company.company_branches.country_state.name",
        "company.company_branches.country.id",
        "company.company_branches.country.country",
        "company.branch_count",
        "profile_specializations.name",
        "profile_specializations.translations",
        "publications.*",
        "awards.*",
        "competitions.*",
        "exhibitions.*",
        "translations",
        "projects.project_photos"
    ],
    "sort":[
        {
            "last_modified_by_user":{
                "order":"desc"
            }
        }
    ],
    "aggs":{
        "countries":{
            "nested":{
                "path":"company"
            },
            "aggs":{
                "country_ids":{
                    "terms":{
                        "field":"company.country_id"
                    }
                },
                "branch_country_ids":{
                    "terms":{
                        "field":"company.company_branches.country_id"
                    }
                }
            }
        },
        "country_states":{
            "nested":{
                "path":"company"
            },
            "aggs":{
                "state_ids":{
                    "terms":{
                        "field":"company.state_id"
                    }
                },
                "branch_state_ids":{
                    "terms":{
                        "field":"company.company_branches.state_id"
                    }
                }
            }
        }
    }
}

php 桶数组结果:

[
    'countries' => [
        'doc_count' => (int) 3165,
        'branch_country_ids' => [
            'doc_count_error_upper_bound' => (int) 3,
            'sum_other_doc_count' => (int) 113,
            'buckets' => [
                (int) 0 => [
                    'key' => (int) 8,
                    'doc_count' => (int) 143
                ],
                (int) 1 => [
                    'key' => (int) 9,
                    'doc_count' => (int) 112
                ],
                (int) 2 => [
                    'key' => (int) 11,
                    'doc_count' => (int) 54
                ],
                (int) 3 => [
                    'key' => (int) 51,
                    'doc_count' => (int) 42
                ],
                (int) 4 => [
                    'key' => (int) 13,
                    'doc_count' => (int) 22
                ],
                (int) 5 => [
                    'key' => (int) 28,
                    'doc_count' => (int) 16
                ],
                (int) 6 => [
                    'key' => (int) 42,
                    'doc_count' => (int) 13
                ],
                (int) 7 => [
                    'key' => (int) 27,
                    'doc_count' => (int) 12
                ],
                (int) 8 => [
                    'key' => (int) 22,
                    'doc_count' => (int) 10
                ],
                (int) 9 => [
                    'key' => (int) 18,
                    'doc_count' => (int) 9
                ]
            ]
        ],
        'country_ids' => [
            'doc_count_error_upper_bound' => (int) 10,
            'sum_other_doc_count' => (int) 481,
            'buckets' => [
                (int) 0 => [
                    'key' => (int) 8,
                    'doc_count' => (int) 940
                ],
                (int) 1 => [
                    'key' => (int) 9,
                    'doc_count' => (int) 731
                ],
                (int) 2 => [
                    'key' => (int) 11,
                    'doc_count' => (int) 248
                ],
                (int) 3 => [
                    'key' => (int) 13,
                    'doc_count' => (int) 165
                ],
                (int) 4 => [
                    'key' => (int) 42,
                    'doc_count' => (int) 138
                ],
                (int) 5 => [
                    'key' => (int) 18,
                    'doc_count' => (int) 130
                ],
                (int) 6 => [
                    'key' => (int) 10,
                    'doc_count' => (int) 91
                ],
                (int) 7 => [
                    'key' => (int) 28,
                    'doc_count' => (int) 91
                ],
                (int) 8 => [
                    'key' => (int) 51,
                    'doc_count' => (int) 84
                ],
                (int) 9 => [
                    'key' => (int) 23,
                    'doc_count' => (int) 66
                ]
            ]
        ]
    ],
    'country_states' => [
        'doc_count' => (int) 3165,
        'branch_state_ids' => [
            'doc_count_error_upper_bound' => (int) 6,
            'sum_other_doc_count' => (int) 300,
            'buckets' => [
                (int) 0 => [
                    'key' => (int) 9,
                    'doc_count' => (int) 50
                ],
                (int) 1 => [
                    'key' => (int) 115,
                    'doc_count' => (int) 46
                ],
                (int) 2 => [
                    'key' => (int) 118,
                    'doc_count' => (int) 26
                ],
                (int) 3 => [
                    'key' => (int) 511,
                    'doc_count' => (int) 26
                ],
                (int) 4 => [
                    'key' => (int) 478,
                    'doc_count' => (int) 20
                ],
                (int) 5 => [
                    'key' => (int) 123,
                    'doc_count' => (int) 17
                ],
                (int) 6 => [
                    'key' => (int) 870,
                    'doc_count' => (int) 17
                ],
                (int) 7 => [
                    'key' => (int) 8,
                    'doc_count' => (int) 13
                ],
                (int) 8 => [
                    'key' => (int) 10,
                    'doc_count' => (int) 13
                ],
                (int) 9 => [
                    'key' => (int) 57,
                    'doc_count' => (int) 12
                ]
            ]
        ],
        'state_ids' => [
            'doc_count_error_upper_bound' => (int) 22,
            'sum_other_doc_count' => (int) 1380,
            'buckets' => [
                (int) 0 => [
                    'key' => (int) 9,
                    'doc_count' => (int) 437
                ],
                (int) 1 => [
                    'key' => (int) 478,
                    'doc_count' => (int) 157
                ],
                (int) 2 => [
                    'key' => (int) 511,
                    'doc_count' => (int) 141
                ],
                (int) 3 => [
                    'key' => (int) 118,
                    'doc_count' => (int) 128
                ],
                (int) 4 => [
                    'key' => (int) 115,
                    'doc_count' => (int) 127
                ],
                (int) 5 => [
                    'key' => (int) 123,
                    'doc_count' => (int) 125
                ],
                (int) 6 => [
                    'key' => (int) 902,
                    'doc_count' => (int) 98
                ],
                (int) 7 => [
                    'key' => (int) 52,
                    'doc_count' => (int) 78
                ],
                (int) 8 => [
                    'key' => (int) 138,
                    'doc_count' => (int) 77
                ],
                (int) 9 => [
                    'key' => (int) 8,
                    'doc_count' => (int) 74
                ]
            ]
        ]
    ]
]

按国家/地区 ID 过滤后的空桶

{
    "query":{
        "bool":{
            "filter":[
                {
                    "bool":{
                        "must":[
                            {
                                "bool":{
                                    "must":[
                                        {
                                            "term":{
                                                "company.country_id":9
                                            }
                                        },
                                        {
                                            "term":{
                                                "company.company_branches.country_id":9
                                            }
                                        }
                                    ]
                                }
                            },
                            {
                                "term":{
                                    "active":true
                                }
                            },
                            {
                                "term":{
                                    "completed":true
                                }
                            }
                        ]
                    }
                }
            ]
        }
    },
    "_source":[
        "id",
        "slug",
        "profile_title",
        "name",
        "year",
        "modified",
        "last_modified_by_user",
        "created",
        "established",
        "company.name",
        "company.company",
        "company.city",
        "company.postal_code",
        "company.translations",
        "company.country.id",
        "company.country.country",
        "company.country.translations",
        "company.country_state.id",
        "company.country_state.name",
        "company.country_state.translations",
        "description",
        "profile_images",
        "profile_category_id",
        "employee_number",
        "primary_profile_category.name",
        "primary_profile_category.translations",
        "project_count",
        "award_count",
        "exhibition_count",
        "employee_count",
        "publication_count",
        "competition_count",
        "keywords",
        "meta_description",
        "domains.id",
        "profile_categories",
        "company.company_branches.company",
        "company.company_branches.city",
        "company.company_branches.id",
        "company.company_branches.country_state.id",
        "company.company_branches.country_state.name",
        "company.company_branches.country.id",
        "company.company_branches.country.country",
        "company.branch_count",
        "profile_specializations.name",
        "profile_specializations.translations",
        "publications.*",
        "awards.*",
        "competitions.*",
        "exhibitions.*",
        "translations",
        "projects.project_photos"
    ],
    "sort":[
        {
            "last_modified_by_user":{
                "order":"desc"
            }
        }
    ],
    "aggs":{
        "countries":{
            "nested":{
                "path":"company"
            },
            "aggs":{
                "country_ids":{
                    "terms":{
                        "field":"company.country_id"
                    }
                },
                "branch_country_ids":{
                    "terms":{
                        "field":"company.company_branches.country_id"
                    }
                }
            }
        },
        "country_states":{
            "nested":{
                "path":"company"
            },
            "aggs":{
                "state_ids":{
                    "terms":{
                        "field":"company.state_id"
                    }
                },
                "branch_state_ids":{
                    "terms":{
                        "field":"company.company_branches.state_id"
                    }
                }
            }
        }
    }
}

聚合为 php 数组结果:

[
    'countries' => [
        'doc_count' => (int) 0,
        'branch_country_ids' => [
            'doc_count_error_upper_bound' => (int) 0,
            'sum_other_doc_count' => (int) 0,
            'buckets' => []
        ],
        'country_ids' => [
            'doc_count_error_upper_bound' => (int) 0,
            'sum_other_doc_count' => (int) 0,
            'buckets' => []
        ]
    ],
    'country_states' => [
        'doc_count' => (int) 0,
        'branch_state_ids' => [
            'doc_count_error_upper_bound' => (int) 0,
            'sum_other_doc_count' => (int) 0,
            'buckets' => []
        ],
        'state_ids' => [
            'doc_count_error_upper_bound' => (int) 0,
            'sum_other_doc_count' => (int) 0,
            'buckets' => []
        ]
    ]
]

根据您的聚合,company 是一个嵌套字段,因此您的过滤条件还必须利用 nested 查询:

{
  "query": {
    "bool": {
      "filter": [
        {
          "bool": {
            "must": [
              {
                "nested": {                     <-- use nested here
                  "path": "company",
                  "query": {
                    "bool": {
                      "must": [
                        {
                          "term": {
                            "company.country_id": 9
                          }
                        },
                        {
                          "term": {
                            "company.company_branches.country_id": 9
                          }
                        }
                      ]
                    }
                  }
                }
              },
              {
                "term": {
                  "active": true
                }
              },
              {
                "term": {
                  "completed": true
                }
              }
            ]
          }
        }
      ]
    }
  },
  "aggs": {
     ...