选择 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 而不是<autoCommit>
。
如果你使用 SolrJ,几乎所有的方法都有一个 commitWithin 参数来使用这个特性。
【讨论】:
以上是关于选择 solr/lucene 提交策略的主要内容,如果未能解决你的问题,请参考以下文章