2

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

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

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

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

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

4

1 回答 1

3

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

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

<autoCommit>我猜您会在一段时间后看到文档出现,因为您的 Solr 实例在您的 solrconfig.xml 文件中配置了某种设置。请参阅此处了解更多详细信息

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

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

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

于 2012-08-13T11:52:23.930 回答