我正在尝试使用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
我对使用两个查询并且对BOOLEAN MODE和所有“+”符号都不太确定这一事实并不满意。我怎样才能改善这个?实现这种自动完成的最佳方法是什么?
答案 0 :(得分:3)
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
您只需将列名添加到查询的MATCH()部分即可。