我在搜索时遇到问题,只是不知道该怎么做。我的文档具有以下形式:
{ "timestamp":"2015-03-17T15:05:04.563Z", "session_id":"1", "user_id":"jan" }
假设会话ID的第一个时间戳是“登录”,最后一个时间戳是“注销”。我希望所有会话都具有所有“登录”和“注销”文档(如果可能,请按排序user_id)。我设法通过聚合获得正确的时间戳:
user_id
{ "aggs" : { "group_by_uid" : { "terms" : { "field" : "user_id" }, "aggs" : { "group_by_sid" : { "terms" : { "field" : "session_id" }, "aggs" : { "max_date" : { "max": { "field" : "timestamp" } }, "min_date" : { "min": { "field" : "timestamp" } } } } } } } }
但是我如何获得相应的文档?我也不介意我是否必须进行2次搜索(一次用于登录,一次用于注销)。我尝试了热门热门文章的汇总和排序工作,但是我总是会遇到解析错误:/
我希望有人能给我一个提示:)
最好的问候,扬
这是基于Sloan Ahrens提出的方法的一次搜索解决方案。好处是开始和结束会话条目位于同一存储桶中。
{ "aggs": { "group_by_uid": { "terms": { "field": "user_id" }, "aggs": { "group_by_sid": { "terms": { "field": "session_id" }, "aggs": { "session_start": { "top_hits": { "size": 1, "sort": [ { "timestamp": { "order": "asc" } } ] } }, "session_end": { "top_hits": { "size": 1, "sort": [ { "timestamp": { "order": "desc" } } ] } } } } } } } }
一月干杯