elasticsearch中的唯一术语

时间:2016-07-30 11:40:52

标签: elasticsearch elasticsearch-2.0 elasticsearch-aggregation

我的数据包含映射和示例如下:

{ 
   date : 'yyyy-mm-dd',
   action : 'click',
   userId : 'not_analysed id in this field',
   user : {
     name : 'John',
     age : '28',
     email : 'john@awesome.com',
     country : 'US'
   }
}

我会有数百万像这样的记录也有重复,因为它是用户活动日志,我想使用日期列基于日期直方图中的唯一userId对它们进行分组。 使用基数来获得基于日期直方图的唯一计数非常简单。

如果我想根据唯一用户存储桶获取最终结果,并将用户字段分组并根据其配置文件获取计数,如下所示。 假设在1月份,我们有大约10,000个活动但只有1,000个唯一用户,并且基于这些用户,我们希望获取用户字段数据以查看人口统计数据。意思是10,000条记录,如果在userId上执行基数,我将有1,000条记录。基于这1,000条记录,我需要得到如下结果。如何将10,000条记录合并到不同的1,000条记录,并从这些记录中得到如下答案。

Expected end results:
{
    '2016-01-01',
    aggs: {
        [{
            age: 28,
            count: 100
        }, {
            age: 27,
            count: 500
        }, {
            country: 'US',
            count: 200
        }, {
            country: 'Canada',
            count: 200
        }]
    },
    '2016-02-01',
    aggs: {
        [{
            age: 29,
            count: 200
        }, {
            age: 31,
            count: 1000
        }, {
            country: 'Mexico',
            count: 400
        }, {
            country: 'UK',
            count: 400
        }]
    }

总之,有没有一般的方法来计算,然后通过使用术语甚至使用管道聚合来获得结果?

请帮忙。

1 个答案:

答案 0 :(得分:0)

您需要的是主日期 - 直方图聚合下的3个不同的子聚合。您的查询将与此类似。

该查询由 using (var context = new BloggingContext()) { var blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList(); } terms数据的age汇总以及唯一身份用户数量country组成。

您可以增加每个术语聚合的大小,以获得所需的结果。

cardinality