代码之家  ›  专栏  ›  技术社区  ›  baynezy

如何从弹性搜索中彻底删除某些东西?

  •  2
  • baynezy  · 技术社区  · 6 年前

    我们用麋鹿堆来伐木。我被要求设计一个程序来删除那些被意外记录的敏感信息。

    现在根据我对ElasticSearch(Lucene)如何处理的阅读 deletes and updates 数据仍在索引中,只是不可用。它最终会随着索引的合并而得到清理,等等。

    是否有一个运行更新(删除某些东西)或删除(删除某物)并保证其删除的过程?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Val    6 年前

    当更新或删除某个值时,ES将标记当前文档作为删除并对新文档进行索引。已删除的值仍将在索引中可用,但不会从搜索中返回。当然,如果有人可以访问底层索引文件,他可能可以使用一些工具( Luke 或类似)查看索引文件中的内容,并可能查看已删除的敏感数据。

    确保标记为已删除的文档的唯一方法是从索引段中真正删除的是 force a merge 现有的部分。

    POST /myindex/_forcemerge?only_expunge_deletes=true
    

    不过,请注意,有一个设置称为 index.merge.policy.expunge_deletes_allowed 它定义了一个阈值,在该阈值下不会发生强制合并。默认情况下,此阈值设置为10%,因此,如果删除的文档少于10%,则强制合并调用不会执行任何操作。您可能需要降低阈值才能进行删除…或者更简单,确保不要索引敏感信息。