2013-08-28 19:24:34 -04:00
|
|
|
[[mapping-ttl-field]]
|
2015-08-06 11:24:29 -04:00
|
|
|
=== `_ttl` field
|
2013-08-28 19:24:34 -04:00
|
|
|
|
2015-07-19 19:24:29 -04:00
|
|
|
Some types of documents, such as session data or special offers, come with an
|
|
|
|
expiration date. The `_ttl` field allows you to specify the minimum time a
|
|
|
|
document should live, after which time the document is deleted automatically.
|
2013-08-28 19:24:34 -04:00
|
|
|
|
2015-07-19 19:24:29 -04:00
|
|
|
[TIP]
|
|
|
|
.Prefer index-per-timeframe to TTL
|
|
|
|
======================================================
|
2014-08-15 11:28:08 -04:00
|
|
|
|
2015-07-19 19:24:29 -04:00
|
|
|
With TTL , expired documents first have to be marked as deleted then later
|
|
|
|
purged from the index when segments are merged. For append-only time-based
|
|
|
|
data such as log events, it is much more efficient to use an index-per-day /
|
|
|
|
week / month instead of TTLs. Old log data can be removed by simply deleting
|
|
|
|
old indices.
|
2013-08-28 19:24:34 -04:00
|
|
|
|
2015-07-19 19:24:29 -04:00
|
|
|
======================================================
|
|
|
|
|
|
|
|
The `_ttl` field may be enabled as follows:
|
2013-08-28 19:24:34 -04:00
|
|
|
|
|
|
|
[source,js]
|
2015-07-19 19:24:29 -04:00
|
|
|
-------------------------------
|
|
|
|
PUT my_index
|
2013-08-28 19:24:34 -04:00
|
|
|
{
|
2015-07-19 19:24:29 -04:00
|
|
|
"mappings": {
|
|
|
|
"my_type": {
|
|
|
|
"_ttl": {
|
|
|
|
"enabled": true
|
|
|
|
}
|
2013-08-28 19:24:34 -04:00
|
|
|
}
|
2015-07-19 19:24:29 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
PUT my_index/my_type/1?ttl=10m <1>
|
|
|
|
{
|
|
|
|
"text": "Will expire in 10 minutes"
|
|
|
|
}
|
|
|
|
|
|
|
|
PUT my_index/my_type/2 <2>
|
|
|
|
{
|
|
|
|
"text": "Will not expire"
|
2013-08-28 19:24:34 -04:00
|
|
|
}
|
2015-07-19 19:24:29 -04:00
|
|
|
-------------------------------
|
|
|
|
// AUTOSENSE
|
|
|
|
<1> This document will expire 10 minutes after being indexed.
|
|
|
|
<2> This document has no TTL set and will not expire.
|
2013-08-28 19:24:34 -04:00
|
|
|
|
2015-07-19 19:24:29 -04:00
|
|
|
The expiry time is calculated as the value of the
|
|
|
|
<<mapping-timestamp-field,`_timestamp`>> field (or `now()` if the `_timestamp`
|
|
|
|
is not enabled) plus the `ttl` specified in the indexing request.
|
2013-08-28 19:24:34 -04:00
|
|
|
|
2015-07-19 19:24:29 -04:00
|
|
|
==== Default TTL
|
2013-08-28 19:24:34 -04:00
|
|
|
|
2015-07-19 19:24:29 -04:00
|
|
|
You can provide a default `_ttl`, which will be applied to indexing requests where the `ttl` is not specified:
|
2013-08-28 19:24:34 -04:00
|
|
|
|
|
|
|
[source,js]
|
2015-07-19 19:24:29 -04:00
|
|
|
-------------------------------
|
|
|
|
PUT my_index
|
2013-08-28 19:24:34 -04:00
|
|
|
{
|
2015-07-19 19:24:29 -04:00
|
|
|
"mappings": {
|
|
|
|
"my_type": {
|
|
|
|
"_ttl": {
|
|
|
|
"enabled": true,
|
2015-11-24 22:57:08 -05:00
|
|
|
"default": "5m"
|
2015-07-19 19:24:29 -04:00
|
|
|
}
|
2013-08-28 19:24:34 -04:00
|
|
|
}
|
2015-07-19 19:24:29 -04:00
|
|
|
}
|
2013-08-28 19:24:34 -04:00
|
|
|
}
|
|
|
|
|
2015-07-19 19:24:29 -04:00
|
|
|
PUT my_index/my_type/1?ttl=10m <1>
|
|
|
|
{
|
|
|
|
"text": "Will expire in 10 minutes"
|
|
|
|
}
|
2013-08-28 19:24:34 -04:00
|
|
|
|
2015-07-19 19:24:29 -04:00
|
|
|
PUT my_index/my_type/2 <2>
|
|
|
|
{
|
|
|
|
"text": "Will expire in 5 minutes"
|
|
|
|
}
|
|
|
|
-------------------------------
|
|
|
|
// AUTOSENSE
|
|
|
|
<1> This document will expire 10 minutes after being indexed.
|
|
|
|
<2> This document has no TTL set and so will expire after the default 5 minutes.
|
2013-08-28 19:24:34 -04:00
|
|
|
|
2015-07-19 19:24:29 -04:00
|
|
|
The `default` value can use <<time-units,time units>> like `d` for days, and
|
|
|
|
will use `ms` as the default unit if no time unit is provided.
|
2013-08-28 19:24:34 -04:00
|
|
|
|
|
|
|
You can dynamically update the `default` value using the put mapping
|
|
|
|
API. It won't change the `_ttl` of already indexed documents but will be
|
|
|
|
used for future documents.
|
|
|
|
|
|
|
|
==== Note on documents expiration
|
|
|
|
|
2015-07-19 19:24:29 -04:00
|
|
|
Expired documents will be automatically deleted periodoically. The following
|
|
|
|
settings control the expiry process:
|
|
|
|
|
|
|
|
`indices.ttl.interval`::
|
|
|
|
|
|
|
|
How often the purge process should run. Defaults to `60s`. Expired documents
|
|
|
|
may still be retrieved before they are purged.
|
|
|
|
|
|
|
|
`indices.ttl.bulk_size`::
|
2013-08-28 19:24:34 -04:00
|
|
|
|
2015-07-19 19:24:29 -04:00
|
|
|
How many deletions are handled by a single <<docs-bulk,`bulk`>> request. The
|
|
|
|
default value is `10000`.
|
2013-08-28 19:24:34 -04:00
|
|
|
|
2015-05-22 12:39:27 -04:00
|
|
|
==== Note on `detect_noop`
|
|
|
|
If an update tries to update just the `_ttl` without changing the `_source` of
|
|
|
|
the document it's expiration time won't be updated if `detect_noop` is `true`.
|
|
|
|
In 2.1 `detect_noop` defaults to `true`.
|