我在Solr查询中使用rord()
函数,以便使用如下语法来提升“rank”字段的查询结果:
bf=rord(cur_rank)^1.8
该算法运行良好,但Solr最近的变化表明使用ord()和rord()现在是一个记忆猪。来自the changelog:
现在,搜索和排序已完成 每段基础,意思是 用于排序的FieldCache条目 并为功能查询创建 并使用每段,可以重复使用 对于之间没有变化的段 索引更新。虽然一般 有益,这可以导致增加 内存使用量超过1.3 场景:
[...]
2)某些功能查询 例如ord()和rord()需要顶部 级别FieldCache实例,因此可以 导致内存使用量增加。 考虑替换ord()和rord() 与替代品,如功能 基于ms()的日期查询 增压。
它提到了处理基于日期的提升的可能策略,但对于“等级”这样的数字如何,其中等级是1和总记录数之间的数字?
rord()似乎是理想的......任何其他策略?
答案 0 :(得分:2)
使用基于段的字段缓存的目的是减少加载时间。如果您想在添加新段后获取字段的值(每次提交时都会这样做),您只需为新添加的段加载新的字段缓存。
使用ord和rord无法实现整个索引的序数而不是单个文档的值。
因此,唯一的解决方案是根据字段“cur_rank”的值而非其ord来计算提升。
这就是日期提升现在的工作方式:它曾经使用日期字段的rord来计算提升,而现在它使用日期字段值和现在之间的毫秒数。有关更多详细信息,请参阅http://wiki.apache.org/solr/SolrRelevancyFAQ(“如何提高新文档的分数”)。