Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 由相同提升值提升的文档的意外Solr分数_Sorting_Solr_Lucene_Sunspot - Fatal编程技术网

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)