坏索引使查询速度很慢?

时间:2013-12-17 08:47:29

标签: solr lucene

所以我有三个Solr服务器。一个致力于索引,两个专门作为搜索者。他们有主从关系。

大约有7000万份文件,大小约为70GB。而且大约有30个细分市场。

在这里我们有类似于上下文搜索的内容,用户可以在其中放置一长串文本,大约150个单词作为示例,他将获得与他放入的文本有关的文档。

当我在具有相同规范(8核,16GB)的测试服务器中尝试时,结果非常快(是的,我删除了高速缓存并重新启动了Solr)。首次搜索大约需要2秒,而第二次搜索需要大约200秒。

问题在于我在生产中尝试过它。搜索大约需要6秒钟,内存或CPU上没有明显的负载(使用htop监控)。

我们尝试了很多东西,我们无法减少数字。然后我们停止在生产中复制从属设备并将索引复制到测试服务器。测试服务器也很慢(第一个测试服务器为26秒,第二个测试服务器大约需要6秒)。

这是否意味着索引不好?因为在测试服务器中我们总是使用新的索引索引。有没有办法在没有新的完全重建索​​引的情况下使索引保持良好状态?

//附加信息 - 对于堆大小,我们为它保留了6Gb,其余用于OS / hd缓存。 我们尝试的是优化搜索方法,例如尝试脉冲发​​布格式,常用术语查询,更好的语言检测和停用词等。

1 个答案:

答案 0 :(得分:1)

无法为您提供100%正常工作的解决方案,但过去对我有用的解决方案是:cat $SOLR/<collection>/solr/*/data/* > /dev/null,这有助于在solr到达之前将大部分数据文件预加载到内存中。我认为它在您的测试服务器上运行速度快的原因在于您索引的位置和操作系统内存“了解”您的数据文件。当您将文件复制到生产Solr时,需要在查询到达时让它们处于延迟加载模式。

这可能不是你的情况,试一试。您可以使用的另一件事是SolrMeter来检查发生了什么。如果这有帮助,请告诉我。