1

我正在研究 Elasticsearch 聚合,并且有一个关于如何进行管道聚合的问题。我的 ES 文档中有三个高级字段:

documentId, list1, list2

示例:这是我拥有的几份文件:

文件 1:

{
  "documentId":"1",
  "list1": 
  [
    {
      "key": "key1",
      "value": "value11"
    }
  ],
  "list2": 
  [
    {
      "key": "key2",
      "value": "value21"
    }
...
  ]
}

文件 2:

{
  "documentId":"2",
  "list1": 
  [
    {
      "key": "key1",
      "value": "value11"
    }
  ],
  "list2": 
  [
    {
      "key": "key2",
      "value": "value21"
    }
...
  ]
}

文件 3:

{
  "documentId":"3",
  "list1": 
  [
    {
      "key": "key1",
      "value": "value12"
    }
  ],
  "list2": 
  [
    {
      "key": "key2",
      "value": "value21"
    }
...
  ]
}

总结一下——

document1 和 document2 的 key1 和 key2 具有相同的一组值(除了 id 不同,因此它们被视为两个单独的文档)。

document3 的 key2 值与 document1 和 document2 中的值相同。key1 的值不同于 document1 和 document2。

我想在 list1 字段的键上运行术语聚合器,它应该作为在 list2 上完成的术语聚合的输入。

所以,对于上面的例子,我想要的整体输出是-value21:2(一个计数对应key1中的value11,第二个计数对应key1中的value12)

而NOT value21: 3(两个count对应key1中的value11,第三个count对应key1中的value12)。

有什么简单的方法可以做到这一点吗?

4

0 回答 0