现在我正在使用以下 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 和 Three,我不确定该怎么做才能让它显示在其他项之上。
希望这是有道理的。
最佳答案
对于 MyISAM 表,“三”是一个 stopword默认情况下,它不会被编入索引,并且在所有搜索中都会被忽略。
如果您确实在使用 MyISAM 表,那么您可以通过 ft_stopword_file
指定您自己的自定义停用词列表,或者完全禁用该功能。服务器选项 (MyISAM)。
注意:对于 InnoDB 表,innodb_ft_server_stopword_table
是要寻找的选项。默认情况下,“三”似乎不是 InnoDB 的停用词,但您的服务器上的停用词列表可能不同。
[编辑]
我完全忽略了 bool 搜索 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
关于mysql全文搜索不首先返回最相关的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17414829/