【问题标题】:disable need for commit in solr to speed up indexing在 solr 中禁用提交以加速索引
【发布时间】:2012-04-05 08:30:44
【问题描述】:

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

 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() 只是将它保存到磁盘)

【问题讨论】:

    标签: node.js solr


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      类似于数据库事务,在提交之前不会将文档添加到 Solr。问题是,正如您所注意到的,Solr 提交非常昂贵。可悲的是,现在没有办法解决这个问题,Solr 不能很好地用于实时搜索。提高添加多个文档性能的方法是将它们作为一个批次添加,然后一次性提交整个文档集。

      理想情况下,您可以使用 Near Realtime Search,但 Solr 4.0 仍在开发中

      【讨论】:

      • 有没有办法让整个索引都在内存中?我的索引只有1GB左右,但是更新频率非常大
      • 我也对此进行了研究,但 Solr 不会在 volatile 状态下运行,更改会在可通过搜索访问之前保存到索引中。除了向它扔硬件之外,我所知道的唯一解决方案是 Solr 4.0 添加软提交。
      猜你喜欢
      • 1970-01-01
      • 2013-03-18
      • 2016-05-27
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      相关资源
      最近更新 更多