mysql全文搜索首先不返回最相关的结果

时间:2013-07-01 22:42:17

标签: mysql search full-text-search

现在我正在使用以下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而且我不知道该怎么做才能让它出现在其他术语之上。

希望这是有道理的。

1 个答案:

答案 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