【问题标题】:Using elastic search to build flow/funnel results based on unique identifiers使用弹性搜索基于唯一标识符构建流/漏斗结果
【发布时间】:2017-01-16 18:46:15
【问题描述】:

我希望能够根据之前的一组结果从单个索引中返回一组单个文档的计数,我想知道是否有一种方法可以做到这一点,而无需为每个文档运行单独的查询。

所以,给定这样的数据集(我的 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 文档,这些文档具有name: visit 结果集的sessionId,并返回有多少name: click 以及name: visit .

有没有简单的方法来做到这一点?我查看了聚合 API,但它们似乎都不太适合我的需求。似乎也存在父/子关系,但它不适用于我的情况,因为我想单独获取计数的两个文档属于同一类型。

预期的结果是这样的:

{
    "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 
    }
}

【问题讨论】:

  • 您能用上面显示的示例数据显示您期望的结果吗?
  • @Val 绝对是,添加到我的原始帖子中!
  • 乍一看,您需要在两个查询中执行此操作,第一个聚合查询检索 sessionIds,然后第二个聚合查询使用这些 sessionIds 过滤以查找点击次数。运行这两个查询没什么大不了的。
  • 听起来不错。如果您将您的评论作为答案,我可以接受。

标签: elasticsearch


【解决方案1】:

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

  1. 用于检索 sessionId 和的第一个聚合查询
  2. 使用这些 sessionId 过滤的第二个聚合查询以查找点击次数。

我认为运行这两个查询没什么大不了的,但这取决于您拥有多少数据以及您想要一次检索多少 sessionId。

【讨论】:

    猜你喜欢
    • 2016-12-09
    • 2020-12-12
    • 1970-01-01
    • 2021-08-27
    • 2013-06-06
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    相关资源
    最近更新 更多