我正在尝试使用mysql全文索引匹配功能为自动完成的搜索框创建一个良好的匹配查询。
我希望它是非常性能优化,如果可能的话,灵活的排版等(没有太多的工作)。
搜索是针对用户的,每个用户都有一个名称和一个屏幕名称。我想把它们组合起来。例如,如果用户名是“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
我不太满意使用两个查询,也不太确定布尔模式和所有“+”符号。我该如何改进?实现这种自动完成的最佳方法是什么?
最佳答案
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()部分。