- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们目前有一个包含大约 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/
我试着理解 precisionStep在几个地方,但不能完全理解它的概念。所以,请用非常简单的语言解释它是关于什么的。 最佳答案 precisionStep 是一个计数,在索引值的多少位之后新术语开始
我们目前有一个包含大约 5000 万个文档的 Solr 实例。有一个我们经常排序的long字段,使用标准的long字段类型,precisionStep为零: 在进行排序时,需要将索引加载到内存中。
我是一名优秀的程序员,十分优秀!