使用弹性搜索基于唯一标识符构建流/漏斗结果

时间:2017-01-12 16:21:50

标签: elasticsearch

我希望能够根据前一组结果从单个索引返回一组单个文档的计数,并且想知道是否有办法在不为每个文档运行单独的查询的情况下执行此操作。

因此,给定一个这样的数据集(我的ES文档的简化版本):

{
  "name": "visit",
  "sessionId": "session1"
},
{
  "name": "visit",
  "sessionId": "session2"
},
{
  "name": "visit",
  "sessionId": "session3"
},
{
  "name": "click",
  "sessionId": "session1"
},
{
  "name": "click",
  "sessionId": "session3"
}

我想要做的是能够搜索name: visit并计算所有这些。那部分很容易。但我还希望现在能够计算name: click sessionId name: visitname: click结果集的文档,并返回其中name: visit{ "count": { // total number of visit events since this is my start point "visit": 3, // the amount of click results that have sessionId // matching my previous search's sessionId values "click": 2 } } 的数量与set long 100000; set longchunksize 100000; 一样。

有一种简单的方法吗?我看过聚合API,但它们似乎都不太适合我的需求。似乎也存在父/子关系,但它并不适用于我的情况,因为我想要单独获得的两个文件属于同一类型。

预期结果将是这样的:

AWSLambdaClient.invoke()

1 个答案:

答案 0 :(得分:1)

乍一看,您需要在两个查询中执行此操作:

  1. 检索sessionIds和
  2. 的第一个聚合查询
  3. 使用这些sessionIds过滤的第二个聚合查询,以查找点击次数。
  4. 我认为运行这两个查询并不是一件大事,但这取决于您拥有多少数据以及您想要一次检索多少个sessionIds。