Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 如何在Solr中关闭排序?_Sorting_Solr_Priority Queue - Fatal编程技术网

Sorting 如何在Solr中关闭排序?

Sorting 如何在Solr中关闭排序?,sorting,solr,priority-queue,Sorting,Solr,Priority Queue,我在Solr集群中存储了大量文档,希望通过特定的查询获得大量文档(约2000万)。我使用标准方法读取一批行(比如10000行),并使用start参数移动到下一批。然而,在大约140000个文档之后,我开始从内存错误中获得OutOfMemoryError。我相信这是因为Solr在将文档发送给客户之前对文档进行排序的方式。据我所知,它使用优先级队列只获取前N个结果,因此不需要将所有文档的头加载到内存中。然而,当我要求它返回结果时,比如从1000000到1010000,它也必须加载所有之前100000

我在Solr集群中存储了大量文档,希望通过特定的查询获得大量文档(约2000万)。我使用标准方法读取一批行(比如10000行),并使用
start
参数移动到下一批。然而,在大约140000个文档之后,我开始从内存错误中获得
OutOfMemoryError
。我相信这是因为Solr在将文档发送给客户之前对文档进行排序的方式。据我所知,它使用优先级队列只获取前N个结果,因此不需要将所有文档的头加载到内存中。然而,当我要求它返回结果时,比如从1000000到1010000,它也必须加载所有之前1000000个文档的标题


我正在寻找一种方法来避免这种情况,只需获得所有结果即可满足查询,而无需排序。有办法吗?如果不是,从Solr获得大量结果的合适方法是什么

你的假设是正确的。当您搜索从1000000到1010000的结果时,Solr将实例化一个大小为1010000的优先级队列

对于Solr来说,这并不是一个自然的用例,它被设计为返回top-k结果列表,而不是一个详尽的结果列表

您可以通过按主键的范围进行筛选来解决这个问题(
q=yourquery&fq=ID:[1到1000]&rows=1000
q=yourquery&fq=ID:[1001到2000]&rows=1000
,…),但这是一个难看的黑客行为。:-)


为什么你需要得到所有的结果?例如,如果您需要计算方面或统计信息,Solr有两个组件可以有效地完成这项工作。

您的假设是正确的。当您搜索从1000000到1010000的结果时,Solr将实例化一个大小为1010000的优先级队列

对于Solr来说,这并不是一个自然的用例,它被设计为返回top-k结果列表,而不是一个详尽的结果列表

您可以通过按主键的范围进行筛选来解决这个问题(
q=yourquery&fq=ID:[1到1000]&rows=1000
q=yourquery&fq=ID:[1001到2000]&rows=1000
,…),但这是一个难看的黑客行为。:-)


为什么你需要得到所有的结果?例如,如果您需要计算方面或统计数据,Solr有两个组件可以有效地完成这项工作。

谢谢,我错过了这个选项。事实上,我使用Solr主要不是作为搜索引擎(通过相关性和所有这些特性进行排序),而是作为一种存储,能够轻松地标记和屏蔽文本。后来,我决定前端带有Lucene的MongoDB更适合于这种用途。所以现在我正在尝试将所有数据从Solr移动到MongoDB,因此需要一批一批地获取所有文档。谢谢,这是我错过的一个选项。事实上,我使用Solr主要不是作为搜索引擎(通过相关性和所有这些特性进行排序),而是作为一种存储,能够轻松地标记和屏蔽文本。后来,我决定前端带有Lucene的MongoDB更适合于这种用途。所以现在我正试图将所有数据从Solr移动到MongoDB,因此需要一批一批地获取所有文档。