【问题标题】:Documents are reflecting after some delay in Solr 3.6Solr 3.6 延迟一段时间后,文档正在反映
【发布时间】:2012-08-13 07:48:21
【问题描述】:

为 ASP.net 应用程序使用 Solr 3.6。我们正在使用 SolrNet 库。

我们有一个用 asp.net 编写的自定义程序,用于使用 SolrNet 将文档增量添加到 Solr。这将监控将文档插入 Solr 的进度。

问题是,应用程序显示流程已完成,但检查 Solr 结果时,我们只能在结果中看到少数文档,而不是所有文档。尽管 15 分钟后再次检查,但 Solr 结果中现在列出的文档很少,大约是初始结果的两倍。请注意,我们没有执行任何将文档添加到 Solr 的过程。

Solr 是否自然?或者我们可以假设在插入和提交所有文档后立即列出它们?这种行为背后的原因是什么?又该如何处理?

编辑 1 在应用程序端一个小时后,我们能够查询 80-90% 的文档。但是 Solr Admin Query 仍然没有列出超过 25% 的文档。

【问题讨论】:

    标签: solr search-engine solrnet


    【解决方案1】:

    在您的自定义 ASP.NET 程序完成将文档添加到 Solr 后,您是否正在向 Solr 发出提交?因为在将新文档提交到索引之前,Solr 中的搜索者将看不到它们。

     var solr = ServiceLocator.Current.GetInstance<ISolrOperations<IndexEntry>>();
     solr.Add(entry);   
     solr.Commit();         
    

    我猜您会在一段时间后看到文档出现,因为您的 Solr 实例在您的 solrconfig.xml 文件中配置了某种 &lt;autoCommit&gt; 设置。详情请见here

    要尝试的一件事是,您可以通过 SolrNet 传递“软提交”参数来告诉索引多久提交您已添加到索引中的新文档。这是一段小 sn-p 代码,它显示了 CommitWithin AddParameter 的使用,它告诉 Solr 在 5 秒内提交文档。

    var solr = ServiceLocator.Current.GetInstance<ISolrOperations<IndexEntry>>();
    solr.Add(entry, new AddParameters { CommitWithin = 5000 });            
    

    我建议使用CommitWithin 参数而不是显式Commit(),因为提交是昂贵的操作,Solr 可以更好地管理这些操作。

    【讨论】:

    • 谢谢先生。我检查了 SolrConfig,未启用 autoCommit。而且,软提交只支持到 4.0。我们正在使用 Solr 3.6。我们分几批向 Solr 添加文档(近 5000 个),在所有批次完成后,我们提交它们。可能是什么问题?或者我们应该怎么做?我们要添加近 1 lac 这样的文档。
    • wiki.apache.org/solr/CommitWithin 表示,然后你有 AutoCommit,在 solrconfig.xml 中配置,它让 Solr 在一定时间或一定数量的文档后自动提交 s,最后可能会有一个背后-当输入缓冲区变满时,场景提交。 -- 输入缓冲区.. 你对输入缓冲区有什么看法?
    猜你喜欢
    • 1970-01-01
    • 2017-06-01
    • 2012-04-14
    • 2013-11-19
    • 2022-07-29
    • 2012-01-28
    • 1970-01-01
    • 2018-09-03
    • 2013-11-09
    相关资源
    最近更新 更多