Elasticsearch文档ttl不起作用

时间:2014-08-22 00:14:23

标签: curl elasticsearch ttl sense

我按照文档中给出的示例为elasticsearch中的文档添加ttl: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-index_.html#index-ttl

在Chrome上使用Sense工具,我尝试了以下操作,并希望文档在5秒内消失:

PUT /twitter/tweets/2
{
    "_ttl" : "5000",
    "user" : "Romonov",
    "TestField" : "TestData2"
}

PUT /twitters/tweetsy/1?ttl=5000
{
    "user" : "Romonov",
    "TestField" : "TestData1"
}

以上都不起作用,文档在5秒后仍然可见。我还尝试在创建该索引上的任何文档之前设置enable _ttl:

PUT /twig/twigsy/_mapping?pretty
{
    "user" : {"_ttl": {"enabled": true}}
}

其中,我尚未在索引树枝上放任何文件。但这回来时出现了一个错误:

{
   "error": "IndexMissingException[[twig] missing]",
   "status": 404
}

我尝试使用curl(在我的Windows机器上安装它),但得到了同样的错误:

C:\WINDOWS\system32>curl -XPUT "http://localhost:9200/facebook/fb/_mapping?pretty" -d "{ "user" : {"_ttl": {"enabled": true}}"
{
  "error" : "IndexMissingException[[facebook] missing]",
  "status" : 404
}

想知道我错过了什么。

2 个答案:

答案 0 :(得分:2)

TTL文档解释了这一点:

  

过期的文件会定期自动删除。您可以动态设置indices.ttl.interval以满足您的需求。默认值为60秒。

因此,只有在下一个到期任务运行时,才会在达到TTL时立即删除文档。您可以降低该作业运行的速率,但这样做会带来性能损失。

答案 1 :(得分:2)

我可以做两件事来完成工作:
1.在elasticsearch.yml文件中添加以下行:

indices.ttl.interval: 7d

2。使用以下行在与elasticsearch.yml相同的位置创建default-mapping.json文档:

{
    _default_ : { 
        "_ttl" : { 
            "enabled" : true, "default" : "7d" 
            }
        }
}

执行这两项操作后创建的所有新群集都已启用为7天。在我观察到现在它适用于在这些新集群上创建的所有索引。