我按照文档中给出的示例为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
}
想知道我错过了什么。
答案 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天。在我观察到现在它适用于在这些新集群上创建的所有索引。