0

我正在按照文档中给出的示例为 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秒后文档仍然可见。在该索引上创建任何文档之前,我还尝试设置启用 _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
}

想知道我错过了什么。

4

2 回答 2

2

我可以通过做两件事让它工作:
1. 在 elasticsearch.yml 文件中添加这一行:

indices.ttl.interval: 7d

2. 在与 elasticsearch.yml 相同的位置创建一个 default-mapping.json 文档,其中包含以下几行:

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

完成这两件事后创建的所有新集群都已启用 ttl 为 7 天。在我到目前为止的观察中,它适用于在这些新集群上创建的所有索引。

于 2014-08-25T22:23:28.690 回答
2

TTL文档解释了这一点:

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

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

于 2014-08-22T02:39:48.430 回答