Elasticsearch - Lsit 整个对象聚合

Elasticsearch - Lsit whole object in terms aggregation

我需要进行查询以聚合方式列出整个对象。映射是这样的:

{
    "travelers": {
        "properties": {
            "traveler": "string",
            "cars": {
                "type":"nested",
                "properties": {
                    "type": {
                        "type":"string"
                    },
                    "color": {
                        "type":"string"
                    }
                }
            }
        }
    }
}

我可以做的查询是这样的:

{
    "aggregations": {
        "people": {
            "terms": {
                "field":"traveler"
            }
        },
        "aggregations": {
            "cars": {
                "nested": {
                    "path":"cars"
                },
                "aggregations": {
                    "types": {
                        "terms": {
                            "field":"cars.type"
                        }
                    }
                }
            }
        }
    }
}

但此查询仅 returns 汽车的类型。我可以将其修改为 return 类型和颜色,但我不能那样说出哪种颜色与哪种类型的汽车相关。我该怎么做?

嵌套聚合只是确保每个嵌套对象都被视为一个文档,并且聚合发生在嵌套文档级别而不是实际文档级别。

因此您需要对颜色进行更多级别的聚合才能获得您要查找的内容。

{
  "aggregations": {
    "people": {
      "terms": {
        "field": "traveler"
      }
    },
    "aggregations": {
      "cars": {
        "nested": {
          "path": "cars"
        },
        "aggregations": {
          "types": {
            "terms": {
              "field": "cars.type"
            },
            "aggs": {
              "colors": {
                "terms": {
                  "field": "cars.color"
                }
              }
            }
          }
        }
      }
    }
  }
}