MySQL全文版不搜索短电子邮件
我在很多列上都有一个全文索引,我试图在这些列上以布尔模式进行匹配,试图找到一个电子邮件地址。结果如下:MySQL全文版不搜索短电子邮件,mysql,full-text-search,Mysql,Full Text Search,我在很多列上都有一个全文索引,我试图在这些列上以布尔模式进行匹配,试图找到一个电子邮件地址。结果如下: 如果我搜索“test@email.com“(带引号)-查询返回正确的结果 如果我搜索“a@b.com“(带引号)-查询不返回任何内容 有人能告诉我为什么要发一封简短的电子邮件吗a@b.com无法返回,我将如何解决此问题 以下是我使用的查询: SELECT MATCH(email, phone, title, description) AGAINST('"a@b.com"' IN BOOLE
- 如果我搜索“test@email.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
更新:
a) 您需要在my.cnf中设置ft\u min\u word\u 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)
希望这会有所帮助
~K
我认为您需要更改ft\u min\u word\u len 如 要编制索引的单词的最小和最大长度由 ft_min_word_len和ft_max_word_len系统变量。(见 第5.1.4节“服务器系统变量”。)默认最小值 是四个字;默认最大值取决于版本。如果你 如果更改任一值,则必须重建全文索引。对于 例如,如果您想搜索三个字符的单词,您可以 通过将以下行放入 选项文件: [mysqld] ft\u min\u word\u len=3 然后重新启动服务器并重建全文索引。请特别注意说明中有关myisamchk的备注 下面是这个列表
这是两个问题的组合:
@
不被视为“单词字符”,也不被视为-
,因此搜索a@b.com
实际上可以归结为搜索单词a
、b
和com
a
和b
比ft\u min\u word\len短@
和
视为单词字符。上列出了几种方法
最实用的方法是添加自定义排序规则,如中所述
谢谢你的回答。我也这么怀疑。实际上,我的最小长度设置为3。如果我搜索“abc@b.com“-它起作用了。但我不明白的是:a)abc@b.com是9个字符长,并作为一个短语在引号中搜索,那么为什么这个设置有任何效果呢?b) 如果最小字长确实有效-那么单词“b”只有一个字符,这是怎么回事?它确实有效,谢谢。我很难理解MySQL认为什么是“Word”。马吕斯:你能不能考虑一下Hartmut的答案而不是这个答案,因为这是一个更好的答案。为了让其他来这里学习的人受益,Hartmuts的回答描述了这两个问题;MIN_字和@符号被忽略的事实,因为它是为@distance运算符保留的。