如何在用数千个术语形成查询时提高solr查询速度?

时间:2014-03-17 16:28:41

标签: solr lucene solrj

我有一个Solr索引,它托管了4百万个文档,其大小为65 Gb。当我使用Web UI浏览索引时,一切都很快。但我真正的查询,大约是2000 Term(都来自同一领域),太慢了。

为了提高我的Solr查询的速度,我首先将索引复制到我的RAM中,这使事情变得更快但我仍然需要提高速度。

我还使用Java7 RecursiveTask创建了我的查询的多线程版本,其中我基本上将查询项的数量除以2,直到查询项的数量超过阈值。然后我聚合子查询的结果以构建最终响应。它使事情变得更快,但它会产生其他类型的问题。

以下是我用于多字词查询的代码

MultiPhraseQuery query = new MultiPhraseQuery(); 
query.add(queryTerms); // where queryTerms is an array of Term 

TopDocs tops = searcher.search(query, rows);
ScoreDoc[] scoreDoc = tops.scoreDocs;

有没有人提出一些改善速度表现的好建议? 谢谢

1 个答案:

答案 0 :(得分:1)

我认为单个索引的2,000个术语太多了。您可能需要重构您的设计。

现在,扩展的可能性是使用SolrCloud进行多次重复,以便改善索引的查询响应时间。

另外,不要忘记字段定义上的stored="false"选项(这可能会使索引大小更小)