solr - Solr 3.6 出现一些延迟后,文档得到了反射(reflect)

标签 solr search-engine solrnet

使用 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/

相关文章:

php - 自动从mysql导入数据到solr

seo - 我的自然谷歌流量怎么了?

apache - elasticsearch和solr之间的根本区别是什么?

c# - SolrNet连接说明

search - Solr 中的 CopyField 似乎不起作用

java - SolrJ添加数据时出错

syntax - 在 Solr 查询中使用 AND、OR 和 NOT

sql全文查询表达式,如何知道sql匹配了哪些形式的同义词?

solr - 如何使用 Solrnet 返回搜索结果分数

solr - Solr 通配符查询中的转义冒号字符