我在一些列上有一个全文索引,我正试图在这些列上对BOOLEAN模式进行匹配,试图找到一个电子邮件地址。结果如下:
有人能告诉我为什么短信电子邮件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
答案 0 :(得分:1)
这是两个问题的组合:
@
不被视为“单词字符”,-
也不是,因此搜索a@b.com
实际上归结为搜索单词a
,{ {1}}和b
com
和a
比ft_min_word_len 解决方案是将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
中所述要索引的单词的最小和最大长度由。定义 ft_min_word_len和ft_max_word_len系统变量。 (看到 第5.1.4节“服务器系统变量”。)默认最小值 是四个字;默认最大值取决于版本。如果你 更改任一值,您必须重建您的FULLTEXT索引。对于 例如,如果您想要搜索三个字符的单词,则可以 通过将以下行放入一个来设置ft_min_word_len变量 选项文件:
的[mysqld] 的的ft_min_word_len = 3 强> 然后重新启动服务器并重建您的FULLTEXT索引。请特别注意说明中有关myisamchk的评论 在此列表之后。