【问题标题】:How to absolutely delete something from ElasticSearch?如何从 ElasticSearch 中绝对删除某些内容?
【发布时间】:2018-12-01 19:53:53
【问题描述】:
我们使用 ELK 堆栈进行日志记录。我被要求设计一个流程,用于删除意外记录的敏感信息。
现在,根据我对 ElasticSearch (Lucene) 如何处理 deletes and updates 的阅读,数据仍在索引中,只是不可用。随着索引的合并等,它最终会被清理干净。
是否有运行更新(编辑某些内容)或删除(删除某些内容)并保证将其删除的流程?
【问题讨论】:
标签:
elasticsearch
lucene
elastic-stack
【解决方案1】:
当更新或删除某个值时,ES 会将当前文档标记为已删除并索引新文档。删除的值仍将在索引中可用,但永远不会从搜索中返回。当然,如果有人可以访问底层索引文件,他也许可以使用某些工具(Luke 或类似工具)来查看索引文件中的内容,并可能看到已删除的敏感数据。
保证标记为已删除的文档真正从索引段中删除的唯一方法是到现有段的force a merge。
POST /myindex/_forcemerge?only_expunge_deletes=true
但请注意,有一个名为 index.merge.policy.expunge_deletes_allowed 的设置定义了一个阈值,低于该阈值时不会发生强制合并。默认情况下,此阈值设置为 10%,因此如果您删除的文档少于 10%,则强制合并调用不会执行任何操作。您可能需要降低阈值才能进行删除……或者更简单,确保不对敏感信息编制索引。