如何迭代拥有超过1亿个文档的SOLR分片?

时间:2012-12-14 12:14:22

标签: search solr lucene

我想迭代所有这些文档,而不必将整个结果加载到内存中,这显然就是这种情况 - QueryResponse.getResults()返回SolrDocumentList,这是一个ArrayList。

在文档中找不到任何内容。我使用SOLR 4。

注意问题的背景:在将新的SOLR分片添加到现有分片群集时,我需要这样做。在这种情况下,我想基于一致的散列将一些文档从现有的分片移动到新添加的分片。我们的数据不断增长,我们需要继续引入新的分片。

2 个答案:

答案 0 :(得分:0)

您可以设置'rows'和'start'查询参数来对结果集进行分页。先查询start = 0,然后start = rows,start = 2 * rows等,直到到达完整结果集的末尾。

http://wiki.apache.org/solr/CommonQueryParameters#start

答案 1 :(得分:0)

我有一个可能的解决方案我正在测试: Solr paging 100 Million Document result set

粘贴: 我正在尝试使用单独的索引字段(整数)对非常大的结果集(例如,超过1亿个文档)进行深度分页,其中插入随机变量(在0和某些已知的MAXINT之间)。在查询大型结果集时,我执行初始字段查询而没有返回任何行,然后根据计数,我将范围0除以MAXINT,以便通过在子范围内再次执行查询来获得平均PAGE_COUNT结果。随机变量并抓取该范围内的所有行。显然,实际的行数会有所不同,但应遵循可预测的分布。