我的团队一直在努力寻找一个相当粗糙的搜索查询。更糟糕的是,我们无法在互联网上找到任何答案,我们也不知道该怎么称呼我们正在寻找的东西。用例如下:
考虑到一个月左右的社交数据,我们希望搜索每个用户最近一次交互的时间跨度,然后汇总这些交互的一个值。 2015年3月20日的搜索结果将为当天互动的每个用户名返回一个且仅一个互动。返回的交互的时间戳将是最接近12AM 3/21/15的时间戳。看起来很简单,不是吗?
我们尝试过top_hits聚合,但我们无法聚合该结果。如果需要,我们愿意以支持此查询的格式重新编制数据索引。任何研究或解决这个问题的帮助将不胜感激。
BTW:对于那些不了解社交数据的人...所有相关社交网站上的用户的公共社交互动。每个帖子都包含一些内容,时间戳和作者。答案 0 :(得分:0)
答案 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,你需要格式化时间戳值才能理解它。