是否可以在 Elasticsearch 中定义聚合函数?
例如对于数据:
author weekday status
me monday ok
me tuesday ok
me moday bad
我想获得基于作者和工作日的聚合,并且作为一个值,我想获得状态字段的串联:
agg1 agg2 value
me monday ok,bad
me tuesday ok
我知道你可以进行计数,但是可以定义另一个用于聚合的函数吗?
编辑/答案:看起来 ES 中没有多行聚合支持,因此我们必须在最后一个字段上使用子聚合(请参阅 Akshay 的示例)。如果您需要更复杂的聚合函数,请按 id 聚合(注意,您将无法使用 _id,因此您必须在其他字段中复制它) - 这样您就可以进行高级操作每个存储桶中各个项目的聚合。
最佳答案
您可以使用 sub aggregations 大致得到您想要的内容在 1.0 中可用。假设文档的结构为作者、工作日和状态,您可以使用以下聚合:
{
"size": 0,
"aggs": {
"author": {
"terms": {
"field": "author"
},
"aggs": {
"days": {
"terms": {
"field": "weekday"
},
"aggs": {
"status": {
"terms": {
"field": "status"
}
}
}
}
}
}
}
}
这会给你以下结果:
{
...
"aggregations": {
"author": {
"buckets": [
{
"key": "me",
"doc_count": 3,
"days": {
"buckets": [
{
"key": "monday",
"doc_count": 2,
"status": {
"buckets": [
{
"key": "bad",
"doc_count": 1
},
{
"key": "ok",
"doc_count": 1
}
]
}
},
{
"key": "tuesday",
"doc_count": 1,
"status": {
"buckets": [
{
"key": "ok",
"doc_count": 1
}
]
}
}
]
}
}
]
}
}
}
关于ElasticSearch聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960955/