现在我正在使用以下mysql查询
SELECT * FROM songs WHERE MATCH (title,artist) AGAINST ('$ser' IN BOOLEAN MODE)
现在它正在运作但不是很好。
例如说我的数据库中有以下术语
Term One
Term Two
Term Three
我搜索第三学期
$ser = 'Term Three'
它只是返回
Term One
Term Two
Term Three
所以这是匹配的术语,但它没有给第三学期更高的优先权同时使用Term和Three而且我不知道该怎么做才能让它出现在其他术语之上。
希望这是有道理的。
答案 0 :(得分:3)
使用MyISAM表时,默认情况下“三”是stopword,因此它没有编入索引,并且在所有搜索中都会被忽略。
如果您确实在使用MyISAM表,那么您可以通过ft_stopword_file
服务器选项(MyISAM)指定自己的自定义停用词列表,或完全禁用该功能。
注意:对于InnoDB表,innodb_ft_server_stopword_table
是要查找的选项。对于InnoDB,“三个”似乎不是默认的禁用词,但是服务器上的停用词列表可能会有所不同。
[编辑]
我完全忽略了布尔搜索do not sort results automatically的相关性(如自然语言搜索一样)。您需要做的就是添加一个ORDER BY子句(请test it here):
SELECT * FROM songs WHERE MATCH (title,artist) AGAINST ('$ser' IN BOOLEAN MODE)
ORDER BY MATCH (title,artist) AGAINST ('$ser' IN BOOLEAN MODE) DESC