我有一个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;
有没有人提出一些改善速度表现的好建议? 谢谢
答案 0 :(得分:1)
我认为单个索引的2,000个术语太多了。您可能需要重构您的设计。
现在,扩展的可能性是使用SolrCloud进行多次重复,以便改善索引的查询响应时间。
另外,不要忘记字段定义上的stored="false"
选项(这可能会使索引大小更小)