ElasticSearch聚合函数

标签 elasticsearch aggregate-functions

是否可以在 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/

相关文章:

sql - 计算精度为 99% 的数据点

sql - Left Join Lateral 和数组聚合

mysql - SQL 仅选择列上具有最大值的行

mongodb - 使用Logstash具有多个输出

java - spring-data-elasticsearch 在多个索引中搜索特定字段

elasticsearch - Elasticsearch:检查GeoPoint是否存在于多个圆的半径内

sql - Oracle 10g 中的聚合字符串连接

sql - 如何用一个字段对两个表中的两个不同字段求和是很常见的

elasticsearch - 使用应基于自定义权重值的过滤器时,是否可以计算匹配次数?

elasticsearch - 如何在elasticsearch中执行特定的搜索查询?