You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Elasticsearch索引文档设置TTL并支持Spring Boot配置

错误原因

你使用的_ttl映射参数是Elasticsearch早期的试验性特性,在2.x版本就被标记为废弃,6.x及以上版本已经完全移除,因此高版本ES无法识别该参数,直接抛出参数不支持的错误。

目前官方推荐的TTL实现方案

现在Elasticsearch统一使用索引生命周期管理(ILM) 实现文档自动过期删除,分为两种常用场景:

场景1:整个索引所有文档统一过期

适合时序类数据,整个索引内所有文档的保存周期一致:

  1. 创建ILM策略,示例设置索引生成24小时后自动删除:
PUT _ilm/policy/order_ttl_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {}
      },
      "delete": {
        "min_age": "24h",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
  1. 将策略绑定到order_index索引:
PUT order_index/_settings
{
  "index.lifecycle.name": "order_ttl_policy"
}

场景2:单文档自定义过期时间

如果需要不同文档设置不同的过期时长,可自行添加过期时间字段配合删除逻辑实现:

  1. 先给索引新增expire_at日期类型字段:
PUT order_index/_mapping/order_doc
{
  "properties": {
    "expire_at": {
      "type": "date"
    }
  }
}
  1. 写入文档时主动计算并设置expire_at的值,比如需要24小时过期就设置为当前时间加24小时。
  2. 7.16及以上版本ES可直接创建带字段条件的ILM策略,自动删除到期文档:
PUT _ilm/policy/order_doc_ttl_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {}
      },
      "delete": {
        "min_age": "0ms",
        "conditions": {
          "field": "expire_at",
          "field_value": "now"
        },
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
  1. 将策略绑定到索引即可。

如果你的ES版本低于7.16,不支持ILM按字段条件删除,可以自行在应用中加定时任务,定期执行delete_by_query删除过期文档:

POST order_index/_delete_by_query
{
  "query": {
    "range": {
      "expire_at": {
        "lte": "now"
      }
    }
  }
}

Spring Boot集成配置

如果你使用Spring Data Elasticsearch,可按以下方式实现配置化管理:

  1. 在application.yml中添加自定义配置项:
spring:
  elasticsearch:
    uris: http://localhost:9200
# 自定义TTL配置
elasticsearch:
  index:
    order:
      ilm-policy: order_doc_ttl_policy
      default-ttl: 24h
  1. 实体类添加expire_at字段注解:
@Field(type = FieldType.Date)
private Date expireAt;
  1. 写启动监听类,项目启动时自动校验ILM策略是否存在,不存在则自动创建;索引创建时自动绑定对应ILM策略。
  2. 写入文档时读取配置的默认TTL,自动计算expireAt的值写入即可。

内容的提问来源于stack exchange,提问作者Lho Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:45:04