有没有办法在ElasticSearch索引中设置ttl

xdyibdwo  于 2022-11-22  发布在  ElasticSearch
关注(0)|答案(3)|浏览(209)

我可以看到文档说我们可以在文档上设置ttl,但不能在索引上设置ttl。我还想知道如果我们设置ttl是否会对性能产生任何影响。

bogh5gae

bogh5gae1#

_ttl是针对每个索引启用的,但过期对每个文档有效。
如果你想让你的索引“过期”,删除它们。更简单,性能更好。
是的,_ttl对性能有影响。Elasticsearch处理“过期”数据的“方式”是创建基于时间的索引。也就是说,为每一天或每一周创建一个索引。在该索引中索引属于那一天/那一周的所有内容。您可以决定保留多少天,并坚持使用该数字。
假设您要将数据保留7天。在第8天,您照常创建新索引,然后删除8天前的索引。您将在集群中拥有7个索引。ttl机制每隔indices.ttl.interval检查一次(默认情况下为60秒),它将从这些文档中创建批量请求并删除它们。这意味着不必要的请求将进入群集。
相反,删除索引非常简单快捷。
了解this以及如何使用Curator轻松管理基于时间的索引。

63lcw9qa

63lcw9qa2#

类似于_ttl的方法现在已弃用(反复迭代会影响性能),Elastic引入了index lifecycle management (ILM)
因此,您现在要做的是每天动态创建索引,例如使用特定于日期的名称模式(如my-app-log-yyyy-mm-dd)和ILM策略来处理超出所需时间范围的索引删除
此外,Elastic还为您提供了用于管理此类策略(即POSTGET)的API,因此您可以在应用程序中自动执行这些操作,以避免手动操作,并保持所有操作的良好和一致性。
索引本身通常很容易由记录器管理,例如Logback允许您在配置中以以下方式定义其名称时创建动态索引:

<index>my-app-logs-%date{yyyy-MM-dd}</index
ui7jx7zq

ui7jx7zq3#

尝试这种方式,我用这个来删除我的到期索引。

**首先,**创建一个策略来描述何时删除索引

PUT〈-您的策略名称

{
  "policy": {
    "phases": {
      "hot": {
        "min_age": "0ms",
        "actions": {
          "set_priority": {
            "priority": 0
          }
        }
      },
      "delete": {
        "min_age": "2d", <-- Set your TTL here
        "actions": {
          "delete": {
            "delete_searchable_snapshot": true
          }
        }
      }
    }
  }
}

**接下来,**创建一个模板以选择使用此策略的索引类型。

在两天后删除

{
"index_patterns": [
    "test*" <-- Choose your index here
],
"template": {
    "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 1,
        "index.lifecycle.name": "delete_log_after_2day"
    }
}
}

现在,当您创建一个新的索引示例时:test 001,它将在2天后自动删除。

**注意:**对于旧索引,它不会分配给新策略,因此除非您分配它,否则它不会被删除.

您可以使用此API将所有旧索引分配给策略
PUT http://localhost:9200/test */_settings〈--您的旧索引在这里,可以使用模式

{
  "index": {
    "lifecycle": {
      "name": "delete_log_after_2day" <-- Your policy name
    }
  }
}

然后在到期日期之后,所有旧索引都将被完全删除。

相关问题