MySQL全文不会搜索简短的电子邮件

时间:2013-04-10 05:52:50

标签: mysql full-text-search

我在一些列上有一个全文索引,我正试图在这些列上对BOOLEAN模式进行匹配,试图找到一个电子邮件地址。结果如下:

  • 如果我搜索“test@email.com”(带引号) - 查询返回正确的结果
  • 如果我搜索“a@b.com”(带引号) - 查询不返回任何内容

有人能告诉我为什么短信电子邮件a@b.com不会被退回,我将如何解决?

这是我正在使用的查询:

SELECT MATCH(email, phone, title, description) AGAINST('"a@b.com"' IN BOOLEAN MODE) AS score 
FROM thetable WHERE MATCH(email, phone, title, description) 
AGAINST('"a@b.com"' IN BOOLEAN MODE) ORDER BY `status` DESC, score DESC

2 个答案:

答案 0 :(得分:1)

这是两个问题的组合:

  1. @不被视为“单词字符”,-也不是,因此搜索a@b.com实际上归结为搜索单词a,{ {1}}和b
  2. coma比ft_min_word_len
  3. 解决方案是将b@视为单词字符。 http://dev.mysql.com/doc/refman/5.6/en/fulltext-fine-tuning.html

    列出了几种方法

    最实用的是添加自定义排序规则,如

    中所述

    http://dev.mysql.com/doc/refman/5.6/en/full-text-adding-collation.html

答案 1 :(得分:0)

更新

a)您需要在my.cnf中设置 ft_min_word_len = 1

b)显示变量的输出

ft_min_word_len                                   | 1 

c)在下面的查询中被解雇:

mysql> SELECT name,email FROM jos_users WHERE MATCH (email) AGAINST ('a@b.com') limit 1;
 +--------+---------+
 | name   | email   |
 +--------+---------+
 | kap | a@b.com |
 +--------+---------+
 1 row in set (0.00 sec)

希望这会有所帮助。

〜ķ


我认为您需要更改 ft_min_word_len

mysql doc fine tunning

中所述
  

要索引的单词的最小和最大长度由。定义   ft_min_word_len和ft_max_word_len系统变量。 (看到   第5.1.4节“服务器系统变量”。)默认最小值   是四个字;默认最大值取决于版本。如果你   更改任一值,您必须重建您的FULLTEXT索引。对于   例如,如果您想要搜索三个字符的单词,则可以   通过将以下行放入一个来设置ft_min_word_len变量   选项文件:

     

的[mysqld]       的的ft_min_word_len = 3        然后重新启动服务器并重建您的FULLTEXT索引。请特别注意说明中有关myisamchk的评论   在此列表之后。