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

标签 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 匹配,但它并没有给 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/

相关文章:

php - foreach 循环未显示所需结果

mysql - 来自多个 MySQL 数据库的 ETL

algorithm - 30 以下的项目列表使用哪种搜索算法?

algorithm - 返回文本之间亲和性的函数?

python - 如何使用SQLAlchemy在SQLite上创建全文检索索引并进行查询?

php - MATCH ... AGAINST 无法得出确切的结果

MySQL 按父/子和名称排序

mysql - AngularJs 实时应用程序与 mysql 服务器

javascript - 根据键的值在包含多个对象的数组中搜索

vb.net - 使用文本框搜索 datagridview 中的列 (vb.net)