Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL全文版不搜索短电子邮件_Mysql_Full Text Search - Fatal编程技术网

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“(带引号)-查询不返回任何内容
有人能告诉我为什么要发一封简短的电子邮件吗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运算符保留的。