狮身人面像搜索排名破了吗?

时间:2011-11-14 10:58:27

标签: sphinx

有没有人获得过Sphinx排名选项?我已经阅读了手册和书籍,但根本无法获得排名。根据我的理解,排名只是以不同的方式计算权重,不进行任何类型的排序。我的结果按@weight(内部sphinx字段)排序并使用扩展的排序模式,你需要这个,但不能看到不同排名模式之间的任何差异。我的配置是这样的:

$cl->SetMatchMode( SPH_MATCH_EXTENDED2 );  
$cl->SetSortMode ( SPH_SORT_EXTENDED, "mylang DESC, @weight DESC, @id"); 

这些都没有任何区别:

$cl->setRankingMode(SPH_RANK_SPH04);
$cl->setRankingMode(SPH_RANK_PROXIMITY_BM25);

两种模式下的权重都相同。

最终,我想要达到的目标是让匹配的术语完全按照顶部排序。例如,如果搜索“哈利波特”,结果应该如下:

Harry Potter
Harry Potter and the potters
Harry Potter and the Prisoner of Azkaban
Harry Potter and the Deathly Hallows: Part 1

这只是一个例子,但第一个结果应该是包含确切搜索词的结果,然后其他结果将跟随。这不会发生。有人对此有经验吗?

2 个答案:

答案 0 :(得分:1)

除了从“哈利波特”开始之外,您还有其他索引记录吗? 如果不是,那么短语“哈利波特”将受到排名算法的惩罚。

请参阅我的文章:Interesting thing about BM25 in Sphinx Search

你们所有的唱片都与“哈利波特”完全匹配,所以我想有更多单词的唱片会排得更高。

解决方案可以是使用以字节为单位存储记录大小的属性:

sql_query = select field, length(field) as f_size from ....

属性:

sql_attr_uint = f_size

Sphinx排序模式:

$cl->SetSortMode ( SPH_SORT_ATTR_ASC, 'f_size' );

答案 1 :(得分:0)

事实证明SPH_RANK_SPH04不包含在0.9.9版本的sphinxapi.php文件中!因此,即使您正在调用它,也不会考虑它,并且不会产生错误。

这很糟糕,因为它很难排除故障。

我发布了这个答案,希望它可以帮助别人。我们失去了将近2天的疯狂,直到我们弄清楚了。

此外,2.0.1中有一个错误,它并没有真正带来一些精确的匹配,因为你需要2.0.2(你需要从SVN获得)或更高,但我会非常厌倦在生产中使用实验版本。

希望Sphinx开发人员能尽快解决这个问题。

PS 回顾开发者日记,它确实说:

“从1.10-beta开始,Sphinx有8名不同的人”

我们从0.9.9升级到2.0.1并且必须将api文件抛在后面,而在绝望中我甚至从未检查过这个。如果排名模式不存在(如同匹配等其他模式一样),Sphinx仍然会抛出错误,并且在我们的测试中,2.0.1错误仍然存​​在。

相关问题