对象或键值对上的 elasticsearch 聚合

elasticsearch aggregation on object or key value pair

我有这样的文件

文件-1

{
  "edges" :[
    {
      "start" : "abc", 
      "end" : "def"
    },
    {
      "start" : "bbb", 
      "end" : "ccc"
    },
    {
      "start" : "xyz", 
      "end" : "aaa"
    }
  ]
}

文件-2[=​​17=]

{
  "edges" :[
    {
      "start" : "abc", 
      "end" : "def"
    },
    {
      "start" : "bbb", 
      "end" : "ccc"
    }
  ]
}

我想要获得 startend 的独特组合。 即如下

{
  "buckets": [
    {
      "key": {
        "start": "abc",
        "end": "def"
      },
      "doc_count": 2
    },
    {
      "key": {
        "start": "bbb",
        "end": "ccc"
      },
      "doc_count": 2
    },
    {
      "key": {
        "start": "xyz",
        "end": "aaa"
      },
      "doc_count": 1
    }
  ]
}

我在 startend 字段上尝试了术语聚合。但没有得到预期的输出。

您需要使用 nested 数据类型,因为数组是扁平化的,因为它在 edges 上的 docs. This is the reason why you can't get the expected results as the relation between keyand value is lost. Furthermore, you'll then need to add a nested 聚合中有很好的描述,然后您可以在其中应用terms 聚合。 聚合的层次结构应如下所示:

nested: edge
    terms: key
        terms: value

在此基础上,您可以通过组合术语聚合的结果来产生预期的结果。