我正在研究 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)。
有什么简单的方法可以做到这一点吗?