如果我运行此查询并打印每行的分数,则它们始终为1:
以下是一些示例查询结果:
First | Last | Score
------------------------------
Jonathan | Bush | 1
Joshua | Gilbert | 1
Jon | Jonas | 1
这是我运行的查询:
SELECT First, Last, MATCH(First, Last) AGAINST ('Jon' IN BOOLEAN MODE) AS score
FROM users
WHERE MATCH(First, Last) AGAINST('Jon' IN BOOLEAN MODE)
ORDER BY score DESC;
答案 0 :(得分:5)
BOOLEAN MODE仅支持二进制答案,表示搜索字符串是否出现在列中,表示0或1。要获得十进制结果来计算权重,您必须在索引列上使用匹配。
您可以通过这种方式使用布尔模式来获取您的英雄:
SELECT *, ((1.3 * (MATCH(column1) AGAINST ('query' IN BOOLEAN MODE))) +
(0.6 * (MATCH(column2) AGAINST ('query' IN BOOLEAN MODE)))) AS relevance
FROM table WHERE ( MATCH(column1,column2) AGAINST
('query' IN BOOLEAN MODE) ) ORDER BY relevance DESC
布尔模式的优点是你可以在非索引列上使用它,但结果只有0,1,非布尔模式返回小数结果,但只能应用于索引列...还here。
答案 1 :(得分:2)
使用NATURAL MODE
的结果作为分数:
SELECT First, Last, MATCH(First, Last) AGAINST ('Jon') AS score
FROM users
WHERE MATCH(First, Last) AGAINST('+Jon' IN BOOLEAN MODE)
ORDER BY score DESC;
注意:注意+运算符。这个仅适用于BOOLEAN MODE
。
为什么我建议NATURAL MODE
按相关性排序,它会返回Jon Chris
:
Jon Chris | Jonas
Jon Martin Chris | Jonas
BOOLEAN MODE
可以返回+Jon +Chris
:
Jon Martin Chris | Jonas
Jon Chris | Jonas
这是因为BOOLEAN MODE
中的两个单词都会返回得分2,但NATURAL MODE
会为第一个条目添加更多内容,因为它会直接命中和/或直接跟随单词返回更好的搜索结果。
答案 2 :(得分:0)
接受的答案部分正确。根据MySQL文档,MATCH AGAINST可以返回浮点数。如果是MyISAM,数据库引擎只会在匹配时返回1。使用MATCH AGAINST进行InnoDB全文搜索将返回浮点数,以便匹配结果可以排序更高质量的匹配。
答案 3 :(得分:0)
分数可能始终为1
(或0
)的另一个原因是,如果全文索引发生了许多变化:运行OPTIMIZE TABLE my_table
将解决此类降级的索引,如Fine-tuning Full-text Search页。