Elasticsearch - 以聚合的形式Lsit整个对象

时间:2015-02-23 20:28:43

标签: elasticsearch nested 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"
                        }
                    }
                }
            }
        }
    }
}

但是这个查询只返回汽车的类型。我可以修改它以返回类型和颜色,但我不能,这样,告诉哪种颜色与哪种类型的汽车有关。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

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

因此,您需要使用颜色进行更多级别的聚合,以获得您想要的内容。

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