无法在elasticsearch中为每个索引设置默认TTL

时间:2018-03-31 03:47:33

标签: elasticsearch elasticsearch-5 ttl

我有一个索引(my_index),根据文档elastic search ttl

我要使用以下API添加默认_ttl
PUT my_index {
    "mappings": {
        "my_type": {
            "_ttl": {
                "enabled": true,
                "default": "24h"
            }
        }
    }
}

我对此API的响应如下

{
    "error": {
        "root_cause": [{
            "type": "resource_already_exists_exception",
            "reason": "index [my_index/a8tTy-UiQ76Z2UkXeJWLIg] already exists",
            "index_uuid": "a8tTy-UiQ76Z2UkXeJWLIg",
            "index": "my_index"
        }],
        "type": "resource_already_exists_exception",
        "reason": "index [my_index/a8tTy-UiQ76Z2UkXeJWLIg] already exists",
        "index_uuid": "a8tTy-UiQ76Z2UkXeJWLIg",
        "index": "my_index"
    },
    "status": 400
}

是否有其他方法可以为所有新传入文档的索引添加TTL?

1 个答案:

答案 0 :(得分:0)

  1. 您使用的是哪个版本的Elasticsearch?您正在链接到2.0的文档,但帖子标有elasticsearch-5。 TTL已在2.0中弃用,在5.0中已删除。对Elasticsearch 2.x的支持最近也已经结束。
  2. 我假设您要启用TTL并设置默认值。您可以动态更新默认值,我认为您也可以启用TTL(但不能再次禁用它)。尝试以下查询(而不是创建您想要更新映射的现有索引):

    PUT /my_index/_mapping/my_type
    {
        "_ttl": {
             "enabled": true,
             "default": "24h"
        }
    }
    
  3. 删除索引后,您应该考虑替代方案。无论是基于时间的索引还是过滤后的查询都可能提供一个很好的选择。