2

我在我的 ES 集群中几乎没有读取过重的索引(开始看到这些索引的性能问题),该集群有大约 5000 万个文档,并注意到其中大多数有大约 25% 的文档被删除,我知道这些删除的文档数量会随着时间的推移而减少当后台合并操作发生时,但在我的情况下,这些计数始终约为总文档的 25%,我有以下问题/疑虑:

  1. 这些巨大的已删除计数是否会影响搜索性能,因为它们仍然是 lucene 不可变段的一部分,并且搜索发生在所有段上并返回最新版本的文档,因此不可变段的大小会很高,因为它们包含大量已删除docs,然后进行另一个操作以找出最新版本的 doc。
  2. 如果存在大量已删除的文档,定期合并操作是否会花费大量时间且效率低下?
  3. 有什么方法可以一次性删除这些大量已删除的文档,因为看起来后台合并操作无法跟上庞大的数量?

谢谢

4

1 回答 1

1

您删除的文档仍然是索引的一部分,因此它们会影响搜索性能(但我无法告诉您它是否会产生巨大影响)。

对于定期合并,Lucene “不愿意”合并重段,因为它需要一些磁盘空间并产生大量 IO。

借助 Index Segments API,您可以获得有关您的细分的宝贵见解

如果您有接近 5GB 限制的段,则它们很可能不会自动合并,直到它们主要由已删除的文档构成。

您可以使用强制合并 API 强制合并索引

请记住,强制合并可能会对大型索引的集群产生一些压力。存在仅删除文档的选项,这应该可以减轻负担。

only_expunge_deletes (可选,布尔值)如果为真,则仅删除包含文档删除的段。默认为假。

在 Lucene 中,不会从段中删除文档;刚刚标记为已删除。在合并期间,将创建一个不包含这些文档删除的新段。

问候

于 2020-02-12T10:41:18.867 回答