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

时间:2011-04-29 18:40:06

标签: lucene solr

我在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()似乎是理想的......任何其他策略?

1 个答案:

答案 0 :(得分:2)

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

使用ord和rord无法实现整个索引的序数而不是单个文档的值。

因此,唯一的解决方案是根据字段“cur_rank”的值而非其ord来计算提升。

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