如何在OpenSearch中指定记录TTL及定义索引默认记录TTL?
在OpenSearch中设置记录TTL及索引默认TTL的方法
单条记录指定TTL
如果要给单条文档设置独立的过期时间,推荐用自定义字段结合索引生命周期管理(ILM)的方式:
- 第一步:创建索引时,在映射里定义一个日期类型字段(比如
expire_at),用于存储文档到期时间:
PUT /my_index { "mappings": { "properties": { "expire_at": { "type": "date" } // 其他业务字段 } } }
- 第二步:索引文档时,指定该字段的具体到期时间:
PUT /my_index/_doc/1 { "content": "测试内容", "expire_at": "2024-12-31T23:59:59Z" }
- 第三步:创建ILM策略,设置当
expire_at字段时间到达时自动删除文档:
PUT _ilm/policy/expire_policy { "policy": { "phases": { "delete": { "min_age": "0ms", "actions": { "delete": { "delete_search_query": { "query": { "bool": { "filter": [ { "range": { "expire_at": { "lte": "{{now}}" } } } ] } } } } } } } } }
- 最后将策略关联到目标索引(创建索引时指定或后续更新):
PUT /my_index/_settings { "index.lifecycle.name": "expire_policy" }
注意:旧版的
_ttl字段已被废弃,OpenSearch官方推荐使用ILM方式实现TTL功能。
为索引设置默认TTL
如果要让索引下所有文档使用统一的默认过期时间,无需每条单独指定,同样通过ILM实现:
- 创建ILM策略,设置文档在创建后固定时长(比如7天)自动删除:
PUT _ilm/policy/default_expire_policy { "policy": { "phases": { "delete": { "min_age": "7d", "actions": { "delete": {} } } } } }
- 关联到索引后,所有文档会在创建时间(基于
@timestamp字段,未指定则用索引时间)过去7天后被自动删除。 - 若需要自定义默认到期时间,可在索引映射里给
expire_at字段设置默认值(比如创建后30天):
PUT /my_index { "mappings": { "properties": { "expire_at": { "type": "date", "default": "{{now+30d}}" } } }, "settings": { "index.lifecycle.name": "expire_policy" } }
这样索引文档时若不指定expire_at,会自动使用默认的30天后到期,再通过ILM自动删除。
内容的提问来源于stack exchange,提问作者quzhi65222714
相关产品推荐
相关产品推荐

