在包含不同数据的2个表中进行全文搜索

时间:2011-07-12 14:35:58

标签: mysql full-text-search match-against

嗨,我有这个sql语句

SELECT *,  MATCH (first_name,last_name) AGAINST ('*?*' IN BOOLEAN MODE) AS score, MATCH (groups.groupname) AGAINST ('*?*' IN BOOLEAN MODE) AS sscore
FROM users INNER JOIN groups  
WHERE MATCH (first_name,last_name) AGAINST ('*?*' IN BOOLEAN MODE) OR MATCH (groups.groupname) AGAINST ('*?*' IN BOOLEAN MODE) 
 ORDER BY 'score' Desc 

1)我如何通过联合评分进行排序?我的意思是使用这个sql语句,它会为第一个匹配创建一个分数,为第二个匹配创建一个分数。如何根据该分数添加这两个分数并订购?

2)我也知道,由于数据不一样,INNER JOIN方式并不是最好的。无论如何我可以删除它吗?

最后,如果我在使用例如 sim 时删除IN BOOLEAN MODE并且first_name是simos我得不到结果。实际上我在布尔模式下得到一个空的结果集如果我把 sim 我得到了simos作为结果。

编辑:我通过这样做回答了我的第二个问题

(SELECT `id`,MATCH(first_name,last_name) AGAINST ('?*' IN BOOLEAN MODE) AS score FROM `users` WHERE MATCH(first_name,last_name) AGAINST ('?*' IN BOOLEAN MODE))

联合 (SELECT groupid,MATCH(groupname)AGAINST('?')AS得分来自groups WHERE MATCH(groupname)AGAINST('?'))

这虽然改变了一切虽然因为我不需要联合评分但仍然有IN BOOLEAN模式的问题

1 个答案:

答案 0 :(得分:1)

order by 'score'不正确,它会尝试按固定字符串score'排序,而不是您在match ... against中创建的别名。

尝试

...
ORDER BY (score + sscore) DESC