我有以下文件:
[
{
"name": "foo",
"types": [
{"uses": "bar", "value": 1},
{"uses": "baz", "value": 2}
]
},
{
"name": "bar",
"types": [
{"uses": "bar", "value": 1},
{"uses": "qux", "value": 3}
]
},
...
]
我首先要汇总“名称”值,然后将这些术语的出现次数计算为“ types.uses”的值,例如:
此请求感觉类似于以下问题:
Elasticsearch documents that only have terms intersecting a list of terms but no other terms
但在这个问题中,它以文字术语列表开头,而我想在管道中生成术语列表以供计数阶段使用。
我知道我可以在两个查询中做到这一点,首先提取“名称”字词列表,然后构建另一个查询,以过滤文档中“ types.uses”在我的字面量列表中的文档,将这些结果汇总。但是我认为应该可以通过管道在一个查询中执行此操作。我试图弄乱管道存储区选择器和脚本,但并没有多大意义。
这是查询的基础:
{
"query": {
"bool": {
"should": [
...
],
"must_not": [
...
],
"minimum_should_match": 1
}
},
"aggs": {
"names": {
"terms": {
"field": "name.keyword"
}
}
},
"size": 0
}
因此,我的查询过滤了正确的文档集,并且我的名字也是如此。现在,我要计算这些特定名称在该文档集的“ types.uses”中出现的次数。