最接近匹配的全文搜索顺序

时间:2013-09-15 14:16:13

标签: mysql

SELECT user_id, user_name.fullname, live, likes,
MATCH (fullname, email, live) AGAINST (:search_I IN BOOLEAN MODE) AS relevance
FROM profile LEFT JOIN user_name ON user_id=user_id
WHERE MATCH (fullname, email, live) AGAINST (:search_II IN BOOLEAN MODE)
ORDER BY relevance DESC 

bindValue(':search_I', $search...);
bindValue(':search_II', $search...);//PDO can't use same one twice

我的查询使用全文搜索,我需要按最接近的匹配排序

但是这个查询不起作用,它没有订购任何东西。

我做了测试,搜索123@hotmail.com

我的数据库中的2行,abc @ hotmail.com& 123@hotmail.com

返回2行但未将最接近的匹配放在最上面(123@hotmail.com)

谁知道问题出在哪里?

1 个答案:

答案 0 :(得分:2)

默认情况下,MySQL全文搜索的最小字长为3(请参阅here)。

因此,'123@hotmail.com'的示例仅与'hotmail'匹配,两者相同。

您可以更改默认值(重建索引)。但是,我建议您使用'abcd@hotmail.com'进行测试。

编辑:

一个单词的定义隐藏在documentation

  

MySQL FULLTEXT实现关注任何真实单词序列   字符(字母,数字和下划线)作为单词。那个序列   也可以包含撇号(“'”),但不能超过一行。   这意味着aaa'bbb被认为是一个单词,但是aaa''bbb是   算是两个字。撇号在开始或结束时   单词被FULLTEXT解析器剥离; 'aaa'bbb'将被解析为   aaa'bbb会

由于where子句,您可以看到两个电子邮件地址都匹配。那场比赛必须在'hotmail'。由于默认的最小字长,'com'和电子邮件名称会被删除。