elasticsearch:基于折叠值获取总计数

zzwlnbp8  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(440)

我是elasticsearch的新手,我正在尝试提取给定时间段内活动的并发用户总数。
例如,我有一个如下的数据集:
用户登录时间注销时间
a 2020-09-21t10:00:00 2020-09-21t10:30:00
b 2020-09-21t10:00:10 2020-09-21t10:30:15
c 2020-09-21t10:00:08 2020-09-21t10:30:10
d 2020-09-21t10:00:15 2020-09-21t10:30:03
根据以上数据,我想建立以下结果:
并发用户时间戳
2020-09-21t10:00:00 1
2020-09-21t10:00:08 2
2020年9月21日10:00:10 3
2020年9月21日10:00:15 4
2020-09-21t10:30:00 4
2020-09-21t10:30:03第3页
2020-09-21t10:30:10 2
2020年9月21日10:30:15 1
我的理解是我们可以分两步来做
提取唯一登录和注销时间
_基于筛选器计算值(注销时间lte给定时间,登录时间gte给定时间)
我想知道有没有可能在单个查询中提取结果?
我在7.9版本工作。

5jdjgkvh

5jdjgkvh1#

您可以通过使用gte:logintime et lte:logouttime将新字段“session”设置为日期范围来实现这一点
然后你就可以做一个约会历史程序了。
请在下面找到一个小测试用例:

PUT test/_mapping
{
    "properties": {
      "date_range_test": {
        "type": "date_range"
      }
    }

}

POST test/_doc
{
  "title": "test1",
  "date_range_test": {
    "gte": "2020-01-01",
    "lte": "2020-01-05"
  }
}

POST test/_doc
{
  "title": "test1",
  "date_range_test": {
    "gte": "2020-01-02",
    "lte": "2020-01-05"
  }
}

POST test/_doc
{
  "title": "test2",
  "date_range_test": {
    "gte": "2020-01-02",
    "lte": "2020-01-07"
  }
}

POST test/_doc
{
  "title": "test3",
  "date_range_test": {
    "gte": "2020-01-07",
    "lte": "2020-01-08"
  }
}

GET test/_search
{
  "size": 0,
  "aggs": {
    "sessions": {
      "date_histogram": {
        "field": "date_range_test",
        "fixed_interval": "1d"
      }
    }
  }
}

以及回应

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 5,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "sessions" : {
      "buckets" : [
        {
          "key_as_string" : "2020-01-01T00:00:00.000Z",
          "key" : 1577836800000,
          "doc_count" : 1
        },
        {
          "key_as_string" : "2020-01-02T00:00:00.000Z",
          "key" : 1577923200000,
          "doc_count" : 3
        },
        {
          "key_as_string" : "2020-01-03T00:00:00.000Z",
          "key" : 1578009600000,
          "doc_count" : 3
        },
        {
          "key_as_string" : "2020-01-04T00:00:00.000Z",
          "key" : 1578096000000,
          "doc_count" : 3
        },
        {
          "key_as_string" : "2020-01-05T00:00:00.000Z",
          "key" : 1578182400000,
          "doc_count" : 3
        },
        {
          "key_as_string" : "2020-01-06T00:00:00.000Z",
          "key" : 1578268800000,
          "doc_count" : 1
        },
        {
          "key_as_string" : "2020-01-07T00:00:00.000Z",
          "key" : 1578355200000,
          "doc_count" : 2
        },
        {
          "key_as_string" : "2020-01-08T00:00:00.000Z",
          "key" : 1578441600000,
          "doc_count" : 1
        }
      ]
    }
  }
}

相关问题