elasticsearch/docs/reference/aggregations/bucket/time-series-aggregation.asciidoc
Kostas Krikellas c7705aa32a
Improve time-series error and documentation (#100018)
* Improve time-series error and documentation

* spotless fix

* Update docs/changelog/100018.yaml

* Fix changelist

* Change exception type
2023-09-29 10:42:01 +03:00

99 lines
3 KiB
Text

[[search-aggregations-bucket-time-series-aggregation]]
=== Time series aggregation
++++
<titleabbrev>Time series</titleabbrev>
++++
preview::[]
The time series aggregation queries data created using a time series index. This is typically data such as metrics
or other data streams with a time component, and requires creating an index using the time series mode.
//////////////////////////
Creating a time series mapping
To create an index with the time series mapping, specify "mode" as "time_series" in the index settings,
"routing_path" specifying the a list of time series fields, and a start and end time for the series. Each of the
"routing_path" fields must be keyword fields with "time_series_dimension" set to true. Additionally, add a
date field used as the timestamp.
[source,js]
--------------------------------------------------
PUT /my-time-series-index
{
"settings": {
"index": {
"number_of_shards": 3,
"number_of_replicas": 2,
"mode": "time_series",
"routing_path": ["key"],
"time_series": {
"start_time": "2022-01-01T00:00:00Z",
"end_time": "2023-01-01T00:00:00Z"
}
}
},
"mappings": {
"properties": {
"key": {
"type": "keyword",
"time_series_dimension": true
},
"@timestamp": {
"type": "date"
}
}
}
}
-------------------------------------------------
// NOTCONSOLE
//////////////////////////
Data can be added to the time series index like other indices:
[source,js]
--------------------------------------------------
PUT /my-time-series-index-0/_bulk
{ "index": {} }
{ "key": "a", "val": 1, "@timestamp": "2022-01-01T00:00:10Z" }
{ "index": {}}
{ "key": "a", "val": 2, "@timestamp": "2022-01-02T00:00:00Z" }
{ "index": {} }
{ "key": "b", "val": 2, "@timestamp": "2022-01-01T00:00:10Z" }
{ "index": {}}
{ "key": "b", "val": 3, "@timestamp": "2022-01-02T00:00:00Z" }
--------------------------------------------------
// NOTCONSOLE
To perform a time series aggregation, specify "time_series" as the aggregation type. When the boolean "keyed"
is true, each bucket is given a unique key.
[source,js,id=time-series-aggregation-example]
--------------------------------------------------
GET /_search
{
"aggs": {
"ts": {
"time_series": { "keyed": false }
}
}
}
--------------------------------------------------
// NOTCONSOLE
This will return all results in the time series, however a more typical query will use sub aggregations to reduce the
date returned to something more relevant.
[[search-aggregations-bucket-time-series-aggregation-size]]
==== Size
By default, `time series` aggregations return 10000 results. The "size" parameter can be used to limit the results
further. Alternatively, using sub aggregations can limit the amount of values returned as a time series aggregation.
[[search-aggregations-bucket-time-series-aggregation-keyed]]
==== Keyed
The `keyed` parameter determines if buckets are returned as a map with unique keys per bucket. By default with `keyed`
set to false, buckets are returned as an array.