这个弹性搜索查询叫什么?

时间:2015-04-17 16:55:46

标签: elasticsearch

我的团队一直在努力寻找一个相当粗糙的搜索查询。更糟糕的是,我们无法在互联网上找到任何答案,我们也不知道该怎么称呼我们正在寻找的东西。用例如下:

考虑到一个月左右的社交数据,我们希望搜索每个用户最近一次交互的时间跨度,然后汇总这些交互的一个值。 2015年3月20日的搜索结果将为当天互动的每个用户名返回一个且仅一个互动。返回的交互的时间戳将是最接近12AM 3/21/15的时间戳。看起来很简单,不是吗?

我们尝试过top_hits聚合,但我们无法聚合该结果。如果需要,我们愿意以支持此查询的格式重新编制数据索引。任何研究或解决这个问题的帮助将不胜感激。

BTW:对于那些不了解社交数据的人...所有相关社交网站上的用户的公共社交互动。每个帖子都包含一些内容,时间戳和作者。

2 个答案:

答案 0 :(得分:0)

听起来您需要日期直方图汇总See Date Histogram Docs

然后,您可以在日期直方图聚合上应用过滤器,根据需要过滤聚合返回的文档,记住您应用的过滤器的顺序。

希望这对你有所帮助

答案 1 :(得分:0)

让我们假设我们有以下文件 -

{
  "user": "qbox",
  "timestamp": "2015-01-01 01:01:01"
}

在映射中,您需要将时间戳标记为日期类型。 现在,以下查询应该为您运行 -

{
  "query": {
    "range": {
      "timestamp": {
        "gte": "2015-01-01 00:00:00",
        "lt": "2015-01-02 00:00:00"
      }
    }
  },
  "aggs": {
    "perUser": {
      "terms": {
        "field": "user"
      },
      "aggs": {
        "maxDate": {
          "max": {
            "field": "timestamp"
          }
        }
      }
    }
  }
}

在这里,您首先在查询中过滤一天值得的数据。 现在,对于每个用户,您将找到最大日期值。 该值将是该用户当天的最后一次互动。这个值是epoch,你需要格式化时间戳值才能理解它。