SolrCloud:使用" start,rows"进行经典分页的解决方法参数

时间:2014-08-14 10:38:25

标签: performance solr solrj solrcloud

我有3个分片的SolrCloud。

我的目的:选择并处理所有类别的产品。

当前实施:周期中的部分选择。

  • 第一次迭代:q = cat:1& start = 0& rows = 100
  • 第二次迭代:q = cat:1& start = 100& rows = 100
  • 3th:q = cat:1& start = 200& rows = 100

...

但是在成长"开始",表现下降。这里的解释:https://wiki.apache.org/solr/DistributedSearch

  

使用高"开始&#34>使效率更低。参数。对于   例如,如果您在500,000+的索引上请求start = 500000& rows = 25   每个分片的文档,这将导致500,000条记录获得   通过网络从碎片发送到协调Solr   实例。相比之下,如果你有一个单一的分片索引,那么只有25个   记录将通过网络发送。 (当然,设定开始   这个高点不是很多人需要做的事情。)

我如何理解类别中的所有记录?

2 个答案:

答案 0 :(得分:3)

还有另一种方法可以在Solr中进行更有效的分页 - Cursors - 它使用排序中的当前位置。这对于深度分页特别有用。

请参阅有关Cursors at the Pagination of Results Wiki页面的部分。这应该加快交付速度,因为服务器应该能够执行一种本地文档,决定它在该序列中的位置,并在该文档之后返回25个文档。

更新:也是有用的链接coming-soon-to-solr-efficient-cursor-based-iteration-of-large-result-sets

答案 1 :(得分:0)

我认为简短的回答是“不” - 这是Solr如何进行分片的限制。相反,你可以收集Solr之外的文档唯一键列表 - 可能来自后备数据库 - 然后使用这些键的集合从索引中检索?

e.g。 ID:(1 OR 2 OR 3 OR ...very long list...)

或者,如果唯一键是数字键,则可以使用移动范围:

ID:[1 TO 1000]然后ID:[1001 TO 2000]等等。

在上述两个选项中,您也会按类别进行限制。然而,它们都应该避免与窗口相关的减速。