选择solr/lucene提交策略

选择solr/lucene提交策略,lucene,solr,indexing,commit,Lucene,Solr,Indexing,Commit,我有120k db记录要提交到Solr索引中 我的问题是: 我应该在提交每10k记录后提交,还是在提交所有120k记录后仅提交一次 这两个选项之间有什么区别吗?根据,commit()允许读者查看添加的文档,并将所有添加/删除的文档放在磁盘的索引中。这是一项耗资巨大的行动 因此,如果您希望在添加其他文档时看到部分文档,或者希望确保不会丢失超过10000个文档的添加文档集,则需要提交每10000条记录 OTOH,如果您希望节省额外的提交时间,并且不怕在机器出现故障时丢失文档,请仅在添加所有文档后提交

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

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

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

根据,commit()允许读者查看添加的文档,并将所有添加/删除的文档放在磁盘的索引中。这是一项耗资巨大的行动

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


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

使用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
50000

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

建议使用而不是


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

如果我最后提交了所有记录,这将占用大量内存,我不知道lucene的详细信息commit@mizboy我不确定它是否会消耗内存。我相信您在添加文档时已经付出了内存代价,因为它们被添加到内存中的索引中。您可能需要对此进行基准测试并做出决定。QA很旧,但我是Solr(6.6)的新手,有一些子问题。如果我们使用自动提交,我们是否需要在推送http查询中使用?commit=true???