更新SOLR文档而不添加已删除的文档

更新SOLR文档而不添加已删除的文档,solr,Solr,我正在运行大量的SOLR文档更新,这导致成千上万的文档被删除,磁盘使用率显著增加(100 Gb) 我可以通过优化删除所有已删除的文档 卷曲 但这需要几个小时才能运行,并且需要大量的RAM和磁盘空间 有没有更好的方法从SOLR索引中删除已删除的文档,或者在不创建已删除文档的情况下更新文档 谢谢你的帮助 Lucene使用一种仅附加的策略,这意味着当添加旧文档的新版本时,旧文档将标记为已删除,并将新文档插入索引中。这样,Lucene就可以避免在添加文档时重写整个索引文件,而代价是旧文档仍然存在于索引中

我正在运行大量的SOLR文档更新,这导致成千上万的文档被删除,磁盘使用率显著增加(100 Gb)

我可以通过优化删除所有已删除的文档

卷曲

但这需要几个小时才能运行,并且需要大量的RAM和磁盘空间

有没有更好的方法从SOLR索引中删除已删除的文档,或者在不创建已删除文档的情况下更新文档


谢谢你的帮助

Lucene使用一种仅附加的策略,这意味着当添加旧文档的新版本时,旧文档将标记为已删除,并将新文档插入索引中。这样,Lucene就可以避免在添加文档时重写整个索引文件,而代价是旧文档仍然存在于索引中—直到发生合并或优化

当您发出expungeDeletes时,您告诉Solr如果已删除文档的数量超过某个阈值,则执行合并,这实际上意味着您在Solr认为必要时在幕后强制进行优化

如何解决这个问题取决于关于用例的更具体的信息——在一般情况下,将其留给合并因子等的标准设置就足够了。如果没有看到任何合并,则可能已禁用自动合并(这取决于索引大小,并且对于需要2m30秒的索引处理来说,看到数十万个已删除文档的情况似乎非常复杂)。在这种情况下,请确保正确启用它并再次调整它的值。还有一些更改允许对合并过程进行更详细的控制(可能还有更好的默认值)


如果每次都要为完整的数据集编制索引,那么也可以选择为单独的集合/核心编制索引,然后在删除旧数据集之前切换别名或在完成后重命名核心。

Lucene使用仅附加策略,这意味着在添加旧文档的新版本时,旧文档标记为已删除,新文档插入索引。这样,Lucene就可以避免在添加文档时重写整个索引文件,而代价是旧文档仍然存在于索引中—直到发生合并或优化

当您发出expungeDeletes时,您告诉Solr如果已删除文档的数量超过某个阈值,则执行合并,这实际上意味着您在Solr认为必要时在幕后强制进行优化

如何解决这个问题取决于关于用例的更具体的信息——在一般情况下,将其留给合并因子等的标准设置就足够了。如果没有看到任何合并,则可能已禁用自动合并(这取决于索引大小,并且对于需要2m30秒的索引处理来说,看到数十万个已删除文档的情况似乎非常复杂)。在这种情况下,请确保正确启用它并再次调整它的值。还有一些更改允许对合并过程进行更详细的控制(可能还有更好的默认值)


如果每次都要为整个数据集编制索引,为单独的集合/核心建立索引,然后在删除旧数据集之前切换别名或在完成后重命名核心也是一个选项。

Update:通过使用commit=True和expungeDeletes=True进行更新,在极少数情况下,它确实会删除添加的一些已删除文档(从8295不带别名到97带别名)但它也显著增加了执行时间(从2分钟30秒增加到5分钟)。这是有帮助的,但我不希望从一开始就添加那些已删除的文档。更新:通过使用commit=True和expungeDeletes=True进行更新,在极少数情况下确实会删除一些已添加的已删除文档(从没有它的8295个文档到有它的97个文档),但它也显著增加了执行时间(从2分钟30秒到5分钟)。这是有帮助的,但我不想添加这些删除的文件开始。谢谢你的回答!我曾研究过修改TieredMergePolicy,特别是ReceiveDeletesWight参数,但没有弄清楚如何做到这一点。你知道怎么修改吗?默认情况下,它应该出现在solorconfig.xml文件中还是手动添加到该文件中?必须添加它-请参阅该部分的外观。
receivedeleteswight
设置应该可以通过
2.0
进行更改。您通过
…告诉它使用TMP。。。设置谢谢@MatsLindh。我更新了我的solrconfig.xml文件,添加了
8
8
10.0
。我将更新~500k个文档,看看明天会是什么样子。使用RecrealDeletesWight=10没有帮助。我的更新导致约500k个新删除的文档(约占总索引大小的1.5%)和约100Gb的索引大小增加(约占索引大小的30%)。我猜删除的文档数量不足以触发合并。如何检查是否禁用了自动合并?当使用expungeDeletes时,它似乎没有进行完整的索引优化。对吗?是否有办法查看哪个索引段中删除的文档最多,并只优化这些索引段?再次感谢你的帮助。谢谢你的回答!我曾研究过修改TieredMergePolicy,特别是ReceiveDeletesWight参数,但没有弄清楚如何做到这一点。你知道怎么修改吗?默认情况下,它应该出现在solorconfig.xml文件中还是手动添加到该文件中?必须添加它-请参阅该部分的外观。
receivedeleteswight
设置应该可以通过
2.0
进行更改。您通过
…告诉它使用TMP。。。设置谢谢@MatsLindh。我更新了solrconfig.xml文件a