使用FULLTEXT mysql索引自动完成查询

时间:2011-07-25 17:30:14

标签: php mysql sql

我正在尝试使用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和所有“+”符号都不太确定这一事实并不满意。我怎样才能改善这个?实现这种自动完成的最佳方法是什么?

1 个答案:

答案 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()部分即可。