选择 solr/lucene 提交策略

Posted

技术标签:

【中文标题】选择 solr/lucene 提交策略【英文标题】:Choosing a solr/lucene commit strategy 【发布时间】:2011-04-23 21:04:18 【问题描述】:

我有 120k db 记录要提交到 Solr 索引中。

我的问题是: 我应该在提交每 10k 条记录后提交,还是在提交所有 120k 条记录后只提交一次?

这两个选项有什么区别吗?

【问题讨论】:

【参考方案1】:

使用 Solr 的默认自动提交值,我认为这是相当合理的。如果没有,您可以调整它们以满足您的需要:

<!-- autocommit pending docs if certain criteria are met.  Future versions may expand the available
 criteria -->
<autoCommit>
  <maxDocs>10000</maxDocs> <!-- maximum uncommited docs before autocommit triggered -->
  <maxTime>50000</maxTime> <!-- maximum time (in MS) after adding a doc before an autocommit is triggered -->
</autoCommit>

这意味着当有超过 10000 个文档等待提交,或者自添加文档以来已经过去 50 秒时,它将提交。

【讨论】:

QA 是旧的,但我是 Solr (6.6) 的新手并且有子问题。如果我们使用 autoCommint,我们是否需要在 push http 查询中使用 ?commit=true ???【参考方案2】:

根据Lucene 2.9.3 documentation,commit() 允许读者看到添加的文档,并将所有添加/删除的文档放在磁盘的索引上。这是一项昂贵的操作。

因此,如果您想在添加其他文档的同时查看部分文档,或者希望确保不会丢失超过 10,000 个文档的添加文档集,则需要每 10,000 条记录提交一次。

OTOH,如果您希望节省额外的提交时间,并且不怕在机器出现故障时丢失文档,请仅在添加所有文档后提交。

【讨论】:

如果我最后提交所有记录,这会不会占用很多内存,我不知道lucene提交的细节 @mizboy 我不确定它是否会消耗任何内存。我相信您在添加文档时已​​经付出了内存的代价,因为它们被添加到内存中的索引中。您可能需要对此进行基准测试并做出决定。【参考方案3】:

推荐的方法是使用commitWithin 而不是&lt;autoCommit&gt;

如果你使用 SolrJ,几乎所有的方法都有一个 commitWithin 参数来使用这个特性。

【讨论】:

以上是关于选择 solr/lucene 提交策略的主要内容,如果未能解决你的问题,请参考以下文章

lucene vs solr 评分

如何使用 Solr/Lucene 搜索值列表?

Apache Solr - Lucene - 邮政编码半径搜索

Solr/Lucene 查询词形还原与上下文

如何标准化 solr/lucene 分数?

确保 Solr/Lucene 索引在长时间重建后“最新”的最佳实践