123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- [[mapping-ttl-field]]
- === `_ttl` field
- 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.
- [TIP]
- .Prefer index-per-timeframe to TTL
- ======================================================
- 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.
- ======================================================
- The `_ttl` field may be enabled as follows:
- [source,js]
- -------------------------------
- PUT my_index
- {
- "mappings": {
- "my_type": {
- "_ttl": {
- "enabled": true
- }
- }
- }
- }
- 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"
- }
- -------------------------------
- // AUTOSENSE
- <1> This document will expire 10 minutes after being indexed.
- <2> This document has no TTL set and will not expire.
- 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.
- ==== Default TTL
- You can provide a default `_ttl`, which will be applied to indexing requests where the `ttl` is not specified:
- [source,js]
- -------------------------------
- PUT my_index
- {
- "mappings": {
- "my_type": {
- "_ttl": {
- "enabled": true,
- "defaut": "5m"
- }
- }
- }
- }
- PUT my_index/my_type/1?ttl=10m <1>
- {
- "text": "Will expire in 10 minutes"
- }
- 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.
- 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.
- 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
- 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`::
- How many deletions are handled by a single <<docs-bulk,`bulk`>> request. The
- default value is `10000`.
- ==== 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`.
|