优化SOLR以检索所有搜索结果

时间:2014-10-31 08:24:37

标签: solr lucene

有时候,我不仅需要SOLR查询的前X个结果,而且还需要所有结果(运行数百万)。通过将0行作为请求参数进行一次搜索,然后使用结果中的numFound作为行数(*)重新执行搜索,可以轻松实现这一点。 当然,我们可以通过例如排序结果。 “id asc”删除相关性排名,但是,我希望能够禁用这些查询的整个评分计算,因为它们可能是计算密集型的,我们只是不需要它们这些案件。

我的问题: 当我们需要的只是所有结果时,有没有办法让SOLR在布尔模式下工作并有效地在这些通常很慢的查询上运行得更快?

(*)我实际上通常只是做一个分页查询,其中脚本遍历页面(多线程),以防止大型结果集超时,但尽可能保持快速,但这对于问题。

这看起来像一个相关的问题,但显然用户提出了错误的问题,并且仅在检索到所有结果后才发现:Solr remove ranking or modify ranking feature;这个问题没有在那里得到解答。

2 个答案:

答案 0 :(得分:1)

使用过滤器而不是查询;过滤器没有分数计算。

答案 1 :(得分:1)

有几件事需要注意

  • Solr deep paging可让您更快地导出大量结果
  • 使用CSV等导出格式比使用XML格式更快,因为格式化更紧凑
  • 并且,如前所述,如果要导出所有内容,请将查询放入FilterQuery并缓存
  • 对于非常复杂的查询,如果您可以将其拆分为多个步骤,您实际上可以为过滤器分配不同的权重并让它们按顺序执行。这允许使用廉价的第一个过滤器,摆脱大部分结果,然后才应用更昂贵,更精确的过滤器