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

Bel*_*ish 6 mysql search full-text-search

现在我正在使用以下mysql查询

SELECT * FROM songs WHERE MATCH (title,artist) AGAINST ('$ser' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

现在它工作但不是很好.

例如,假设我的数据库中包含以下术语

Term One
Term Two
Term Three
Run Code Online (Sandbox Code Playgroud)

我在搜索第三学期

$ser = 'Term Three'
Run Code Online (Sandbox Code Playgroud)

它只是回归

Term One
Term Two
Term Three
Run Code Online (Sandbox Code Playgroud)

所以这是匹配的术语,但它没有给第三学期更高的优先级同时使用术语和三,我不知道该怎么做才能让它出现在其他术语之上.

希望有道理.

Ran*_*eed 4

对于 MyISAM 表,“三”默认是停用词,因此不会对其进行索引,并且在所有搜索中都会忽略它。

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

注意:对于 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
Run Code Online (Sandbox Code Playgroud)