选择solr / lucene提交策略

时间:2010-10-11 15:12:24

标签: lucene solr indexing commit

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

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

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

3 个答案:

答案 0 :(得分:5)

使用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个文档时,它将提交。

答案 1 :(得分:1)

根据Lucene 2.9.3 documentation,commit()允许读者查看添加的文档,并将所有添加/删除的文档放在磁盘中的索引上。这是一项代价高昂的行动。

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

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

答案 2 :(得分:1)

推荐的方法是使用commitWithin代替<autoCommit>

如果您使用的是SolrJ,几乎所有方法都有一个commitWithin参数来使用此功能。