例如,搜索查询是“排名”,结果很少:
Row #1: ranking good
Row #2: rank greater
Row #3: my custom rank
但是想要
Row #1: rank greater
Row #2: ranking good
Row #3: my custom rank
我用
expr('sum((10*(101-IF(min_hit_pos<100,min_hit_pos,100))+exact_hit)*user_weight)*1000+bm25')
使用LCS的另一种方式对我来说并不是最佳选择,因为有一个blend_chars和“multi-part”需要更多的权重,然后单独“multi”或“part”
expr('sum((4*lcs+(101-IF(min_hit_pos<100,min_hit_pos,100))+exact_hit)*user_weight)*1000+bm25')
Sphinx 2.1.2
感谢您的帮助
答案 0 :(得分:0)
你不能仅仅在排名中这样做,因为排名者对单词的长度一无所知。
狮身人面像只是数字,(crc或查找表 - 取决于字典)所以它不知道这个单词有多长。
我能想到的唯一可能有帮助的是index_exact_words
会影响精确单词匹配的排名。 (所以排名将排名高于排名,因为它完全匹配)
(澄清是exact_hit只是所有查询单词匹配字段单词,但知道没有匹配morpholoyg或前缀单词匹配。所以“rankng”&gt;“rank”仍然是exact_hit,因为它们是相同的单词主题阻止)