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)
所以这是匹配的术语,但它没有给第三学期更高的优先级同时使用术语和三,我不知道该怎么做才能让它出现在其他术语之上.
希望有道理.
对于 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)
| 归档时间: |
|
| 查看次数: |
885 次 |
| 最近记录: |