elasticsearch - 如何在 Elasticsearch 中计算每Y平均X?

标签 elasticsearch

假设我有一个事件列表,例如“网页浏览”。我想计算每个 session 的平均综合浏览量。

我的文件看起来像这样

{
  sessionID: 'xxx',
  action: 'pageview'
}

因此,我尝试执行的操作是先按sessionID进行汇总,然后再应用avg。子聚合,但这不是我期望的。

我是ElasticSeach的新手。在EC中产生这种聚合的逻辑是什么?

谢谢

最佳答案

通过在sessionID字段上进行汇总,您已经正确开始了。然后,您需要在filter字段上再添加一个action子聚合,以仅匹配pageview操作。您的聚合查询如下所示:

{
  "size": 0,
  "aggs": {
    "sessions": {
      "terms": {
        "field": "sessionID"
      },
      "aggs": {
        "pageviews": {
          "filter": {
            "term": {
              "action": "pageview"
            }
          }
        }
      }
    }
  }
}

这将为您提供每个 session 的总doc_count,在每个 session 存储区中,您将获得该 session 内doc_count操作的总pageview

然后可以轻松地计算平均值
response.aggregations.sessions.forEach(function(session) {
    var actionsInSession = session.doc_count;
    var pageviewActions = session.pageviews.doc_count;
    var avg = pageviewActions / actionsInSession;
    // do something with the average value
});

更新

如果您正在使用(或愿意使用)ES 2.0,则可以使用pipeline aggregations让ES为您计算这些平均值。
{
   "size": 0,
   "aggs": {
      "sessions": {
         "terms": {
            "field": "sessionID"
         },
         "aggs": {
            "total": {
               "value_count": {
                  "field": "sessionID"
               }
            },
            "pageviews": {
               "filter": {
                  "term": {
                     "action": "pageview"
                  }
               },
               "aggs": {
                  "cnt": {
                     "value_count": {
                        "field": "action"
                     }
                  }
               }
            },
            "avg": {
               "bucket_script": {
                  "buckets_path": {
                     "total": "total",
                     "pageviews": "pageviews > cnt"
                  },
                  "script": "pageviews / total"
               }
            }
         }
      }
   }
}

在每个sessionID存储桶中,您将获得avg操作数与该 session 的总操作数的pageview值。

关于elasticsearch - 如何在 Elasticsearch 中计算每Y平均X?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33622943/

相关文章:

elasticsearch - 格式错误的查询,预期为 END_OBJECT,但在 Kibana( Elasticsearch )中发现了 FIELD_NAME 错误

elasticsearch - Elasticsearch 中的多个类似查询

mysql - 从 MySQL 过渡到 Elasticsearch 时处理搜索?

performance - ElasticSearch 和突出显示性能 - 普通与快速矢量突出显示

data-structures - Lucene (Solr/ElasticSearch) 是如何快速进行过滤词条计数的?

elasticsearch - 针对大型静态索引的性能调整?

java - elasticsearch中更新文档的效率

elasticsearch - Elasticsearch转换搜索吗?

amazon-web-services - AWS Elastic Search中的部分字符串搜索以及多个单词

elasticsearch - Elasticsearch使用不同的 bool 值查询多种类型