Sorting 由相同提升值提升的文档的意外Solr分数
我有两份文件:Sorting 由相同提升值提升的文档的意外Solr分数,sorting,solr,lucene,sunspot,Sorting,Solr,Lucene,Sunspot,我有两份文件: { title: "Popular", registrations_count: 700, is_featured: false } 及 我正在运行这个Solr查询(通过Ruby Sunspot gem): 或者,对于那些更习惯使用ruby的人: Challenge.search do boost(10) do with(:registrations_count).greater_than_or_equa
{
title: "Popular",
registrations_count: 700,
is_featured: false
}
及
我正在运行这个Solr查询(通过Ruby Sunspot gem):
或者,对于那些更习惯使用ruby的人:
Challenge.search do
boost(10) do
with(:registrations_count).greater_than_or_equal_to(700)
end
boost(10) do
with(:is_featured, true)
end
order_by :score, :desc
end
一个文档匹配第一个boost查询,另一个匹配另一个boost查询。它们具有相同的提升值
我所期望的是两个文档得到相同的分数。但他们没有,他们得到了这样的东西
1.2011336 # score for 'unpopular' (featured)
0.6366436 # score for 'popular' (not featured)
我还检查了,如果我增强了他们两个都有共同点的属性,他们会得到完全相同的分数,而且他们会。我还尝试将700
值更改为类似7000
的值,但没有任何区别(这完全有道理)
有人能解释为什么他们得到如此不同的分数,而他们都匹配一个boost查询吗?我猜混淆源于“查询被相同的值提升”-这不是真的-提升是查询本身的分数,然后被你的
^10
放大10倍
bq
是加法的-查询的分数被添加到文档的分数中(而boost
是乘法的,分数被boost查询相乘)
如果您希望根据其中一个匹配向原始查询添加相同的分数值,则可以使用^=10
,这使得查询的分数保持不变(无论文档的常规分数如何,该术语的分数将为10
)
另外,如果你想独立地应用这些因素(而不是将两个因素的贡献作为一个单一的合并分数),那么可以使用多个
bq
条目。是的,这肯定是我不理解的关于提升工作原理的东西。谢谢你不会碰巧知道什么时候^=
被添加到solr?我使用的是过时的Solr4.x版本,如果我没有做错什么,它似乎不受支持。我刚刚看到有人提到Solr5.1。不确定这是否是第一个版本,但很可能4.0没有。这是正确的。4.0太旧了,无法支持Solr中的大多数现代功能(因为它现在已经有8-9年的历史了)。您可能可以使用带有几个if-s的boost函数,但我不记得4.0支持哪些部分,哪些部分不支持。Solr 5.1中添加了常量评分运算符
Challenge.search do
boost(10) do
with(:registrations_count).greater_than_or_equal_to(700)
end
boost(10) do
with(:is_featured, true)
end
order_by :score, :desc
end
1.2011336 # score for 'unpopular' (featured)
0.6366436 # score for 'popular' (not featured)