为什么在 Solr 4.10.x 中更新索引要花这么多时间?

Why does an index update take so much time in Solr 4.10.x?

我正在使用 solr 4.10.3。我必须更新大约 100,000 个索引。查询类似于每个文档

curl 'localhost:8900/solr/update?commit=true' -H 'Content-type:application/json' -d '[{"id":"org.wikipedia.ur:http/wiki/%D9%85%DB%8C%D9%84","group":{"set":"wiki"}}]'

开始更新这个索引后,12个小时过去了,只更新了48000个文档。

哪里有问题。谁能指导我?

您正在对每个 curl 请求使用硬提交。这会强制 solr 在每次提交时将段(用于存储索引的 lucene 数据结构)推送到磁盘。 Solr 总是将数据写入新的段,看起来它强制它创建 100K 段。

Solr 使用 mergePolicy 作为 TieredMergePolicymergeFactor 作为 10 默认参数,每次合并时 solr 有 10 个几乎相等的大小段。此合并进程在后台运行,使用 ConcurrentMergeScheduler 实现。

此合并过程 CPU 密集。这里可以使用softCommit代替hardCommit。这可能对你有帮助。

你应该像这样使用软提交

curl 'localhost:8900/solr/update?softCommit=true' -H 'Content-type:application/json' -d '[{"id":"org.wikipedia.ur:http/wiki/%D9%85%DB%8C%D9%84","group":{"set":"wiki"}}]'