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