我刚刚成功将我的数据导入ES,例如。它看起来像这样:
"activity": 'viewed',
"sessionId": "000000143198107b3fe510b041138cd33fdd9252aab9808c",
"campaign_id":""
,
"activity": 'campaign_viewed',
"sessionId": "000000143198107b3fe510b041138cd33fdd9252aab9808c",
"campaign_id":"my_campaign"
如您所见,这两个条目具有相同的sessionId
,并且由于第二个条目具有campaign_id
,我将假设第一个活动(已查看)也是从广告系列生成的。
那么我怎么能算得上:
(计算从广告系列生成的活动):
count(activity)
where sessionId in (select sessionid from index where campaign_id="m_campaign") ?
或换句话说:
“仅在此期间计算同一会话中的所有活动 会话中有一个'activity = campaign_viewed'。
我知道ES很快就会有聚合。但不确定这是否会解决这类问题。
P.S。我想到的可能的解决方案是: 1.通过sessionId将数据放入存储桶,同时在campaignId字段上执行count和max 所以我可以拥有如下数据组:
6, session1, my_campaign_1 5, session2, my_campaign_1 6, session1, null (assume its the result of max on empty string)
2然后对step1中生成的bucket数据的campaign_d字段执行另一个聚合 并排除其campaign_id为null的所有数据。最终结果将是:
11, my_campiagn_1
但我不确定这是否可以在ES中完成。
非常感谢! 陈