我们目前有一个Solr实例,它拥有约5000万个文档。有一个long
领域,我们经常排序,使用标准long
字段类型零的precisionStep
:Solr排序,precisionStep和内存使用
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
<field name="row" type="long" indexed="true" stored="true" />
当谈到做一个排序,索引需要在内存中加载。在我们的例子中,我们需要大量的row
值,我们需要500万到1克的堆才能完成。
我想知道是否可以减少这种内存使用要求。
增加row
字段的precisionStep
是否会减小索引大小,从而减少排序所需的内存量?在对分类速度做这件事情时是否有一个权衡?并且在更高精度的步骤下排序仍然完全正确(行值必须严格按顺序)?
1GB的堆现在是相当可以接受的,但是如果我们添加更多的文档以及更多的row
值,内存要求将变得太高,我有点谨慎。
(jpountz的回答后加入)
虽然这符合当前内存中,它不会与规模,我们期待在未来几个月增加文档的数量。我们可能会从Solr中得到未排序的结果,并在基于磁盘的java-merge-sort的客户端上对它们进行排序。