gpt4 book ai didi

Solr 排序、precisionStep 和内存使用

转载 作者:行者123 更新时间:2023-12-02 02:14:04 24 4
gpt4 key购买 nike

我们目前有一个包含大约 5000 万个文档的 Solr 实例。有一个我们经常排序的long字段,使用标准的long字段类型,precisionStep为零:

<fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
<field name="row" type="long" indexed="true" stored="true" />

在进行排序时,需要将索引加载到内存中。在我们的例子中,由于 row 值的范围很大,我们需要 500m 到 1g 的堆来进行排序。

我想知道是否可以以某种方式减少这种内存使用要求。

增加 row 字段的 precisionStep 会减小索引大小,从而减少排序所需的内存量吗?这样做与排序速度之间是否存在折衷?如果采用更高的精度步骤,排序是否仍然完全正确(行值必须严格按顺序排列)?

1GB 的堆现在是完全可以接受的,但如果我们添加更多具有更多 row 值的文档,内存需求会变得太高,我有点担心。


(在 jpountz 的回答之后添加)

虽然目前这适合内存,但它不会随着我们预计在未来几个月内添加的文档数量而扩展。我们可能会从 Solr 获得未排序的结果,并在客户端使用基于磁盘的 java-merge-sort 对它们进行排序.

最佳答案

precisionStep 参数仅与范围查询相关。为了执行排序,Lucene 需要在 field cache 中加载字段值。 long 是 8 个字节,你的字段的字段缓存应该需要大约 8B * 50M ~ 400 MB。如果您真的需要此字段的 long,则无法减少内存使用量(另一方面,使用 int 只需要大约 200MB)。

关于Solr 排序、precisionStep 和内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11463264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com