【问题标题】:Remove or delete old data from elastic search从弹性搜索中删除或删除旧数据
【发布时间】:2016-03-14 04:58:55
【问题描述】:

如何从弹性搜索索引中删除旧数据,因为索引每天都会插入大量数据。

【问题讨论】:

  • 为什么这个问题被否决了?

标签: elasticsearch elasticsearch-plugin


【解决方案1】:

您可以使用delete by query 插件来做到这一点。

假设您的索引中有一些 timestamp 或 creation date 字段,您的查询将如下所示

DELETE /your_index/your_type/_query
{
  "query": {
    "range": {
      "timestamp": {
        "lte": "now-10y"
      }
    }
  }
}

这将删除超过 10 年的记录。

希望对你有帮助

【讨论】:

  • 有没有办法以脚本的形式来做,这样我们就不用手动运行查询了
  • 此删除查询是否会从索引中完全删除记录并为插入新记录留出空间
  • 您可以设置一个cron job 每天执行此操作,执行删除后记录不被删除,它们被标记为已删除和在段合并期间它们实际上被删除了,您可能会看到删除或更新后索引大小增加,您可以使用force merge 来优化您的索引
  • 什么是段合并?段合并后索引的大小减小了
  • 通过this了解段合并,你不能这样减小大小,合并段后不会出现刚刚删除的数据。还 read 关于 elasticsearch 如何工作以更好地理解。
【解决方案2】:

将数据拆分为每日索引并使用别名作为旧索引名称。然后每天删除每个索引。就像logstash:

每日指数:logstash-20151011,logstash-20151012,logstash-20151013.

完整别名:logstash

然后每天删除最后一个索引。

【讨论】:

【解决方案3】:

如果您使用基于时间的索引,则应类似于:

curl -XDELETE http://localhost:9200/test-2017-06

【讨论】:

    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 2016-01-30
    • 2018-10-04
    • 1970-01-01
    • 2017-09-25
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多