标签: date-histogram

弹性搜索聚合中的动态时区偏移?

我正在汇总每个都有时间戳的文档.时间戳是UTC,但每个文档也有一个本地时区("timezone": "America/Los_Angeles"),可以在文档之间有所不同.

我正在尝试date_histogram aggregation基于当地时间而不是UTC或固定时区(例如,使用该选项"time_zone": "America/Los_Angeles").

如何在聚合之前将每个文档的时区转换为当地时间?

这是简单的聚合:

{
  "aggs": {
    "date": {
      "date_histogram": {
        "field": "created_timestamp",
        "interval": "day"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

timezone elasticsearch date-histogram elasticsearch-aggregation

6
推荐指数
1
解决办法
1974
查看次数

Elasticsearch平均日期直方图桶

我在ElasticSearch中有一堆索引的文档,我需要获取以下数据:

对于每个月,获取当月每个工作日的平均文档(或者如果不可能,则使用20天作为默认值).

我已经使用聚合将我的数据汇总到了几个桶中date histogram.我尝试嵌套stats存储桶,但此聚合使用从文档字段中提取的数据,而不是从父存储桶中提取的数据.

这是我目前的查询:

{
    "query": {
        "match_all": {}
    },
    "aggs": {
        "docs_per_month": {
            "date_histogram": {
                "field": "created_date",
                "interval": "month",
                "min_doc_count": 0
            }
            "aggs": {
                '???': '???'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

为了使我的问题更清楚,我需要的是:

  • 获取为该月创建的文档总数(由于date_histogram聚合已经完成)
  • 获取当月的工作日数
  • 将第一个除以第二个.

facets elasticsearch date-histogram

6
推荐指数
2
解决办法
2524
查看次数

基数日期直方图

为了实现表示唯一访问者指标总数的日期直方图,查询 Elasticsearch 的最佳方法是什么?

考虑以下数据:

PUT /events
{
"mappings" : {
        "_doc" : {
            "properties" : {
                "userId" : { "type" : "keyword" },
                "eventDate" : { "type" : "date" }
            }
        }
    }
}

POST /events/_bulk
{ "index" : { "_index" : "events", "_type" : "_doc", "_id" : "1" } }
{"userId": "1","eventDate": "2019-03-04T13:40:18.514Z"}
{ "index" : { "_index" : "events", "_type" : "_doc", "_id" : "2" } }
{"userId": "2","eventDate": "2019-03-04T13:46:18.514Z"}
{ "index" : { "_index" : "events", "_type" …
Run Code Online (Sandbox Code Playgroud)

elasticsearch date-histogram

6
推荐指数
2
解决办法
836
查看次数

Elasticsearch - 计算嵌套聚合相对于父存储桶的百分比

更新的问题

在我的查询中,我先聚合日期,然后聚合传感器名称。是否可以根据父存储桶的嵌套聚合和文档总数(或任何其他聚合)计算比率?查询示例:

{
  "size": 0,
  "aggs": {
    "over_time": {
      "aggs": {
        "by_date": {
          "date_histogram": {
            "field": "date",
            "interval": "1d",
            "min_doc_count": 0
          },
          "aggs": {
            "measure_count": {
              "cardinality": {
                "field": "date"
              }
            },
            "all_count": {
              "value_count": {
                "field": "name"
              }
            },
            "by_name": {
              "terms": {
                "field": "name",
                "size": 0
              },
              "aggs": {
                "count_by_name": {
                  "value_count": {
                    "field": "name"
                  }
                },
                "my ratio": count_by_name / all_count * 100 <-- How to do that?
              }
            }
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个自定义指标,它可以给出count_by_name …

aggregation bucket elasticsearch date-histogram

5
推荐指数
1
解决办法
4002
查看次数

使用带有固定间隔 (30d) 的 date_histogram 意外存储桶开始

我需要每 30 天(而不是每月)聚合一次数据,因此我使用date_histogramwith"fixed_interval": "30d"来获取该数据。例如,如果用户想要最近 90 天的聚合,则应该有 3 个存储桶:[90-60, 60-30, 30-0]。以今天的日期(2021 年 3 月 18 日)为例,我想要桶 [12 月 18 日、1 月 17 日、2 月 16 日]。

然而,我实际得到的是[12月4日,1月3日,2月2日,3月4日]。第一个存储桶的启动时间早于任何可用数据,这也意味着最终需要比预期更多的存储桶。

我发现您无法轻易判断您的存储桶何时开始(例如,我希望我的第一个存储桶在今天 - 90 天开始)。根据我能找到的内容(例如this ) ,桶似乎从 1970-01-01 开始,文档也​​有点这样说(这个链接,尽管它没有深入影响影响)。

考虑到这一点,我发现我可以使用offset一个“有趣的公式”,这样我就能得到我需要的正确的桶。例如:

GET /my_index/_search?filter_path=aggregations
{
  "size": 0,
  "query": {
    "bool": {
      "must": [
        { "range" : {
          "@timestamp" : {
              "gte" : "TODAY - 90/60/30",
              "lt" : "TODAY"
          }}
        }
      ]
    }
  },
  "aggs": {
    "discussion_interactions_chart": {
      "date_histogram": …
Run Code Online (Sandbox Code Playgroud)

elasticsearch date-histogram elasticsearch-aggregation

5
推荐指数
1
解决办法
2286
查看次数

弹性搜索 date_histogram extended_bounds

我想在特定时间段内获取 date_histogram,如何限制日期时间段?我应该使用extended_bounds 参数吗?例如:我想查询'2016-08-01'和'2016-08-31'之间的date_histogram,间隔为天。我用这个表达式查询:

{
  "aggs": {
    "cf_loan": {
      "date_histogram": {
        "field": "createDate",
        "interval": "day",
        "format": "yyyy-MM-dd",
        "min_doc_count": 0,
        "extended_bounds": {
          "min": "2016-08-01",
          "max": "2016-08-31"
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是我得到的 date_histogram 不在范围内。

elasticsearch date-histogram

3
推荐指数
1
解决办法
2677
查看次数

唯一值的日期直方图

我正在使用 Elasticsearch 2.3,对于用户在我的网站中访问的每个网页,我都会生成一条包含用户会话 ID 和当前时间戳的记录。
所以我有一些具有相同会话 ID 但不同时间戳的记录。
我正在尝试从用户记录中创建一个date_histogram具有唯一会话 ID 的会话。

创建没有唯一性的直方图很容易:

{
    "aggs" : {
        "users_sessions" : {
            "date_histogram" : {
                "field" : "date",
                "interval" : "1h"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是是否有可能拥有具有唯一值的日期直方图(例如,每个唯一会话 ID 的第一次出现)?

elasticsearch date-histogram elasticsearch-aggregation

2
推荐指数
1
解决办法
1481
查看次数

在表上生成日期直方图

我使用 Postgres CLI 编写了一个查询,该查询在终端中返回条形图。查询速度慢且效率低。我想改变这一点。

在底层,我们有一个非常简单的查询。我们希望每一行都是表中总行数的除法。假设我们的硬编码行数是N_ROWS,我们的表是my_table

另外,假设N_ROWS等于 8。

select
    (select count(id) from my_table) / N_ROWS * (N_ROWS - num) as level 
from (VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8)) as t (num)
Run Code Online (Sandbox Code Playgroud)

就我而言,这将返回图表的 Y 轴:

 level
-------
 71760
 62790
 53820
 44850
 35880
 26910
 17940
  8970
     0
Run Code Online (Sandbox Code Playgroud)

您已经可以看到该查询的问题。

我可以使用编程方式生成多行N_ROWS而不是对每个行值进行硬编码吗VALUES?显然,我也不喜欢对整个表的每一行执行新的计数。

我们现在需要 X 轴,这就是我的想法:

select
    r.level,
    case
        when (
            select count(id) from my_table where created_at_utc<= '2019-01-01 00:00:00'::timestamp without time zone
        ) …
Run Code Online (Sandbox Code Playgroud)

postgresql date-histogram

2
推荐指数
1
解决办法
2022
查看次数