如何定期删除弹性搜索索引?

How to delete elastic search indices periodically?

我每天都创建索引来存储搜索历史,我在应用程序中使用这些索引作为建议,这也有助于我根据历史提出建议。

现在我只需要维护最近 10 天的历史记录。那么 Elasticsearch 有什么功能可以让我定期创建和删除索引吗?

我不知道 elasticsearch 是否有这样的内置功能,但你可以通过 curator 和 cron 作业实现你想要的。

一个示例 curator 命令是:

策展人 3.x 语法 [已弃用]:

curator --host <IP> delete indices --older-than 10 --prefix "index-prefix-" --time-unit days  --timestring '%Y-%m-%d'

Curator 5.1.1 语法:

curator_cli --host <IP> --port <PORT> delete_indices --filter_list '[{"filtertype":"age","source":"creation_date","direction":"older","unit":"days","unit_count":10},{"filtertype":"pattern","kind":"prefix","value":"index-prefix-"}]'

运行 此命令每天使用 cron 作业删除超过 10 天的索引,这些索引的名称以 index-prefix- 开头,并且存在于位于 <IP>:[=15 的 Elasticsearch 实例上=].

有关更多馆长命令行选项,请参阅:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/singleton-cli.html

有关 cron 用法的更多信息,请参阅: http://kvz.io/blog/2007/07/29/schedule-tasks-on-linux-using-crontab/

我唯一能想到的就是使用数据数学: https://www.elastic.co/guide/en/elasticsearch/reference/current/date-math-index-names.html

从某种意义上说,您可以这样做:

DELETE <logs-{now%2Fd-10d}>

由于 url 编码,这在 curl 中效果不佳。你可以在 curl:

中做这样的事情
curl -XDELETE 'localhost:9200/<logs-%7Bnow%2Fd-10d%7D>'

这两个示例都删除了 10 天前的索引。它不能帮助您删除超过 10 天的索引,认为这是不可能的。而且它们不是弹性搜索中的触发器或其他东西。

所以我会结合 curator 坚持 cron 作业,但你也可以选择这个选项。