我正在尝试使用mysql FULLTEXT索引MATCH功能为自动完成搜索框创建一个良好的匹配查询.我希望它是非常性能优化的,如果可能的话可以灵活处理拼写错误(没有太多的工作).
搜索适用于用户,其中每个用户都有一个名称和一个屏幕名称.我想匹配它们的组合.例如,如果用户名是"Guy Kawasaki"并且屏幕名称是"gkawasaki",则查询"gkawas"和"Guy K"将指向他.此外,我希望结果按照匹配分数和我在表格中持有的等级的组合进行排序.
目前我所做的是两个不同的查询:
SELECT *, MATCH (name) AGAINST ('+Guy +K*' IN BOOLEAN MODE) AS SCORE
FROM
users
WHERE
MATCH (name) AGAINST ('+Guy +K*' IN BOOLEAN MODE)
ORDER BY SCORE, grade DESC LIMIT 5
SELECT *, MATCH (screen_name) AGAINST ('+Guy +K*' IN BOOLEAN MODE) AS SCORE
FROM
users
WHERE
MATCH (screen_name) AGAINST ('+Guy +K*' IN BOOLEAN MODE)
ORDER BY SCORE, grade DESC LIMIT 5
Run Code Online (Sandbox Code Playgroud)
对于我使用两个查询并且对BOOLEAN MODE和所有"+"符号都不太确定的事实我不是很满意.我怎样才能改善这个?实现这种自动完成的最佳方法是什么?
SELECT *, MATCH (name, screen_name) AGAINST ('+Guy +K*' IN BOOLEAN MODE) AS SCORE
FROM users
WHERE MATCH (name, screen_name) AGAINST ('+Guy +K*' IN BOOLEAN MODE)
ORDER BY SCORE, grade DESC
LIMIT 5
Run Code Online (Sandbox Code Playgroud)
您只需将列名添加到查询的 MATCH () 部分即可。