使用 Solr 3.6 进行 ASP.net 应用程序。我们正在使用 SolrNet 库。
我们有一个用 asp.net 编写的自定义程序,可以使用 SolrNet 将文档增量添加到 Solr。这监视将文档插入 Solr 的进度。
问题是,应用程序显示流程已完成,但检查 Solr 结果时我们只在结果中看到很少的文档,而不是所有文档。尽管 15 分钟后再次检查,Solr 结果中现在列出了更多文档,大约是初始结果的两倍。请注意,我们没有执行任何将文档添加到 Solr 的过程。
Solr 自然吗?或者我们可以假设在插入和提交后立即列出所有文档吗?这种行为背后的原因是什么?又该如何处理呢?
编辑 1 在应用程序端运行一小时后,我们能够查询 80-90% 的文档。但 Solr Admin Query 仍然没有列出超过 25% 的文档。
最佳答案
在您的自定义 ASP.NET 程序完成向 Solr 添加文档后,您是否向 Solr 发出提交?因为在您将新文档提交到索引之前,Solr 中的搜索者将看不到您的新文档。
var solr = ServiceLocator.Current.GetInstance<ISolrOperations<IndexEntry>>();
solr.Add(entry);
solr.Commit();
我猜您在一段时间后会看到文档出现,因为您的 Solr 实例配置了某种 <autoCommit>
在 solrconfig.xml 文件中设置。请参阅here了解更多详情
要尝试的一件事是,您可以通过 SolrNet 传递“软提交”参数来告诉索引多久提交您添加到索引中的新文档。这是一小段代码,显示了 CommitWithin
的使用AddParameter 告诉 Solr 在 5 秒内提交文档。
var solr = ServiceLocator.Current.GetInstance<ISolrOperations<IndexEntry>>();
solr.Add(entry, new AddParameters { CommitWithin = 5000 });
我建议使用CommitWithin
参数与显式 Commit()
因为提交是昂贵的操作,而 Solr 可以更好地管理这些操作本身。
关于solr - Solr 3.6 出现一些延迟后,文档得到了反射(reflect),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11930101/