7

现在我正在使用以下 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 相匹配,但它并没有赋予 Term 3 更高的优先级,同时拥有 Term 和 3,我不知道该怎么做才能让它出现在其他人之上。

希望这是有道理的。

4

1 回答 1

4

对于 MyISAM 表,默认情况下“三”是停用词,因此它没有被索引,并且在所有搜索中都被忽略。

ft_stopword_file如果您确实在使用 MyISAM 表,那么您可以通过服务器选项 (MyISAM)指定您自己的自定义停用词列表,或完全禁用该功能。

注意:对于 InnoDB 表,innodb_ft_server_stopword_table是要查找的选项。默认情况下,“三”似乎不是 InnoDB 的停用词,但您的服务器上的停用词列表可能不同。


[编辑]

我完全忽略了布尔搜索不会按相关性自动对结果进行排序(就像自然语言搜索那样)。您需要做的就是添加一个 ORDER BY 子句(请在此处测试):

SELECT * FROM songs WHERE MATCH (title,artist) AGAINST ('$ser' IN BOOLEAN MODE)
ORDER BY MATCH (title,artist) AGAINST ('$ser' IN BOOLEAN MODE) DESC
于 2013-07-08T08:48:16.687 回答