3

我想将我的 elasticsearch 0.19.11 配置为每 60 秒删除一次索引。我的 elasticsearch 配置有以下 3 行:

node.name: "Saurajeet"
index.ttl.disable_purge: false
index.ttl.interval: 60s
indices.ttl.interval: 60s

它不工作我有 2 个默认文档索引。并且预计它会在 60 年代之后

$ curl -XGET http://localhost:9200/twitter/_settings?pretty=true
{
  "twitter" : {
    "settings" : {
      "index.version.created" : "191199",
      "index.number_of_replicas" : "1",
      "index.number_of_shards" : "5"
    }
}

此外,如果我尝试执行以下操作,它没有任何效果

$ curl -XPUT http://localhost:9200/twitter/_settings -d '
> { "twitter": {
>     "settings" : {
>       "index.ttl.interval": "60s"
>    }
>  }
> }
> '
{"ok":true}~/bin/elasticsearc
$ curl -XGET http://localhost:9200/twitter/_settings?pretty=true
{
  "twitter" : {
    "settings" : {
      "index.version.created" : "191199",
      "index.number_of_replicas" : "1",
      "index.number_of_shards" : "5"
    }
  }
}

我有 2 个文档的索引,1 小时后它仍然显示

$ curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '
{ 
    "user": "kimchy", 
    "postDate": "2009-11-15T13:12:00", 
    "message": "Trying out Elastic Search, so far so good?" 
}'
$ curl -XPUT 'http://localhost:9200/twitter/tweet/2' -d '
{ 
    "user": "kimchy", 
    "postDate": "2009-11-15T13:12:00", 
    "message": "Trying out Elastic Search, so far so good?" 
}'

我做错什么了

PS我想用logstash部署这个配置。因此,可以建议任何其他替代方案。出于扩展原因,我不希望此自动清除成为脚本。

4

2 回答 2

8

我相信 indices.ttl.interval 设置只是为了调整清理过程的时间。

您需要为索引/类型设置 _ttl 字段才能使其过期。它看起来像这样:

{
    "tweet" : {
        "_ttl" : { "enabled" : true, "default" : "60s" }
    }
}

http://www.elasticsearch.org/guide/reference/mapping/ttl-field/

于 2013-04-26T22:31:13.603 回答
1

终于想通了自己。将 elasticsearch 版本升级到 1.2.0。您可以从Mapping API中输入 TTL 。->放置映射-> TTL

在索引的类型级别上启用 TTL

$ curl -XPOST http://localhost:9200/abc/a/_mapping -d '
{
    "a": {
      "_ttl": {
        "enabled": true,
        "default": "10000ms"
      }
    }
}'

$ curl -XPOST http://localhost:9200/abc/a/a1 -d '{"test": "true"}'
$ $ curl -XGET http://localhost:9200/abc/a/a1?pretty
{
  "_index" : "abc",
  "_type" : "a",
  "_id" : "a1",
  "_version" : 1,
  "found" : true,
  "_source":{"test": "true"}
}
$ # After 10s
$ curl -XGET http://localhost:9200/abc/a/a1?pretty
{
  "_index" : "abc",
  "_type" : "a",
  "_id" : "a1",
  "found" : false
}

笔记:

  • 映射适用于创建映射后创建的文档。
  • 还为类型 a 创建了映射。因此,如果您发布到类型 b 并期望它在 TTL 上过期,那将不会发生。

如果您需要使索引过期,您还可以在创建索引期间创建索引级别映射,以从您的应用程序逻辑中预创建索引。

于 2014-06-04T09:27:03.037 回答