Lucene 什么';在Solr中,替换ord()和rord()函数查询的推荐策略是什么?

Lucene 什么';在Solr中,替换ord()和rord()函数查询的推荐策略是什么?,lucene,solr,Lucene,Solr,我在Solr查询中使用rord()函数,以增强针对“rank”字段的查询结果,语法如下: bf=rord(cur_rank)^1.8 该算法运行良好,但Solr中最近的变化表明,使用ord()和rord()现在占用了大量内存。发件人: 搜索和排序现在是在 按段计算,这意味着 用于排序的FieldCache条目 并为函数创建查询 并按段使用,可重复使用 对于不在 索引更新。而一般来说 有益的,这会导致增加 在某些情况下,内存使用率超过1.3 场景: [……] 2) 某些函数查询 例如ord()和

我在Solr查询中使用
rord()
函数,以增强针对“rank”字段的查询结果,语法如下:

bf=rord(cur_rank)^1.8
该算法运行良好,但Solr中最近的变化表明,使用ord()和rord()现在占用了大量内存。发件人:

搜索和排序现在是在 按段计算,这意味着 用于排序的FieldCache条目 并为函数创建查询 并按段使用,可重复使用 对于不在 索引更新。而一般来说 有益的,这会导致增加 在某些情况下,内存使用率超过1.3 场景:

[……]

2) 某些函数查询 例如ord()和rord()需要顶部 级别的FieldCache实例,因此可以 导致内存使用增加。 考虑替换OR()和Rord.() 有其他选择,如功能 基于ms()的日期查询 助推

它提到了处理基于日期的提升的可能策略,但是对于像“rank”这样的数字,rank是介于1和记录总数之间的数字,又如何呢


rord()似乎很理想。。。还有其他策略吗?

使用基于段的字段缓存的目的是减少加载时间。如果要在添加新段(每次提交时都会执行)后获取字段值,只需为新添加的段加载新字段缓存

这在ord和rord中是不可能的,ord和rord为整个索引提供序号,而不是单个文档的值

因此,唯一的解决方案是根据字段“cur_rank”的值而不是ord来计算boost


这就是日期提升现在的工作方式:它过去使用日期字段的rord来计算提升,而现在使用日期字段的值和now之间的毫秒数。有关更多详细信息,请参阅(“如何提高较新文档的分数”)。

这就是我们最终要做的。