有人曾经使用过 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
这只是一个示例,但第一个结果应该是包含确切搜索词的结果,然后是其他结果。这并没有发生。有人对此有经验吗?
除了以“哈利·波特”开头的记录外,索引中还有其他记录吗?
如果不是,则短语“Harry Potter”将受到排名算法的惩罚。
请参阅我的文章:Sphinx 搜索中有关 BM25 的有趣事情 http://www.ivinco.com/blog/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' );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)