search - 弹性(搜索): Get docs with max and min timestamp values

标签 search elasticsearch

我在搜索时遇到了问题,我不知道该怎么做。我的文档具有以下形式:

{
"timestamp":"2015-03-17T15:05:04.563Z",
"session_id":"1",
"user_id":"jan"
}

假设 session ID 的第一个时间戳是“登录”,最后一个时间戳是“注销”。我想要所有 session 的所有“登录”和“注销”文档(如果可能,按 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 次搜索(一次用于登录,一次用于注销)。我尝试了一些 HitTest 门的聚合和排序,但我总是遇到解析错误:/

我希望有人能给我提示:)

最好的问候, 简

最佳答案

这是基于 Sloan Ahrens 提出的方法的单一搜索解决方案。优点是开始和结束 session 条目在同一个桶中。

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

干杯, 简

关于search - 弹性(搜索): Get docs with max and min timestamp values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29169612/

相关文章:

mysql - 从所有记录中查找匹配的问题

api - Elastic Search Scroll API 异步执行

iphone - 在 iPhone 上实现全文搜索?

algorithm - 分支定界

c# - 在大量数据中快速(子)字符串搜索

elasticsearch - 在ElasticSearch中检索最大文档大小

elasticsearch - 匹配项析取

elasticsearch - 找不到uri [/ModelName]和方法[POST]的处理程序

c# - 使用Nest + C#在 Elasticsearch 中查找具有空字段/附件的文档

elasticsearch - Docker Compose引发AccessDeniedExpcetion