禁用在solr中提交以加快索引的速度

时间:2012-03-20 20:10:24

标签: node.js solr

目前,我使用solr作为搜索服务器。我的问题是我在数据集上做了很多实时索引(虽然文档大小非常小,只有100个字符)。我想知道如何通过禁用提交,自动提交等功能来加快速度。只需将其添加到索引中,我不要太担心数据集太不稳定了。我使用节点js库索引到solr。这是一个片段:

 var doc = {
                id: id.id,
                text_t: id.words
                };

                var callback = function(err, response) {
                    if (err) throw err;
                    solr.commit();

                };
            solr.add(doc, callback);

删除,solr.commit()不对文档编制索引(即使我认为commit()只是将其保存到磁盘)

2 个答案:

答案 0 :(得分:6)

即将推出的Solr版本将有一个名为soft commit的功能,您可能会感兴趣。软提交类似于提交,但不会生成fsync以确保数据已写入磁盘。这意味着您可能会丢失数据(例如,如果电源发生故障,但在服务器继续运行时Solr崩溃则不会),但软提交可能比常规(硬)提交快得多,因为操作系统可以利用缓冲区缓存。

使用当前版本的Solr,一个很好的权衡是使用Solr UpdateHandler的commitWithin feature。例如,通过使用10000作为commitWithin参数的值,您可以确保在将任何文档添加到索引后最多10秒后提交该文档,并且每10秒将提交率保持在1次提交之下。较低的commitWithin值将提供更好的数据新鲜度,而较高的值会减少磁盘的压力。

答案 1 :(得分:1)

与数据库事务类似,在提交之前不会将文档添加到Solr。问题是,Solr提交非常昂贵,正如您所注意到的那样。可悲的是,现在没有办法解决这个问题,Solr在实时搜索方面效果不佳。提高添加多个文档的性能的方法是将它们作为批处理添加,并提交一整套文档。

理想情况下,您可以使用Near Realtime Search,但仍在制定Solr 4.0