我有一个Elasticsearch索引,其中包含以下字段的文档:
这些字段中的每个字段可能包含多个用户ID。
我想执行一个汇总,以计算与每个用户(作为作者或贡献者)相关的文档总数。
我可以分别查询每个聚合,但是如何合并它们呢?这是我的查询:
GET documents/_search
{
"aggs": {
"contributor": {
"terms": {
"field": "contributor"
}
},
"author": {
"terms": {
"field": "author"
}
}
}
}
现在,我得到以下结果:
"aggregations": {
"author": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [{
"key": 2,
"doc_count": 10
},
{
"key": 1,
"doc_count": 7
},
{
"key": 5,
"doc_count": 3
}
]
},
"contributor": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [{
"key": 5,
"doc_count": 1
}]
}
}
但是我想进行一次汇总,为用户5返回4个文档的计数。
答案 0 :(得分:1)
好吧,如果您可以更新您的映射并添加一个字段,那么应该可以。请不要这样可能真的很慢(字符串上的agg太慢,不应过度使用)。请注意,如果同一文档中的author =贡献者,则agg不会计算2次出现(好消息)。
{
"mappings": {
"test": {
"properties": {
"contributor": {
"type": "keyword",
"copy_to": "author_and_contributor"
},
"author": {
"type": "keyword",
"copy_to": "author_and_contributor"
},
"author_and_contributor": {
"type": "string",
"fielddata": true
}
}
}
}
}
{
"size": 0,
"aggs": {
"author_contrib_agg": {
"terms": {
"field": "author_and_contributor"
}
}
}
}