使用匹配语句使用转义斜杠时,Mysql不返回结果

时间:2013-07-30 01:22:09

标签: php mysql match full-text-search

我有firstname等于\的记录。出于某种原因,它没有把我的记录归还给我。

SELECT 
    firstname,lastname,middlename,
    primary_emailaddress,alternate_emailaddress,personal_address_line1,
    personal_address_line2,personal_address_city,facebook_username,
    twitter_username,googleplus_username,linkedin_username,
    personal_website_url,birthday_month,notes,personal_address_zipcode,
    company_address_zipcode,home_phonenumber,company_phonenumber,
    cell_phonenumber,birthday_day,birthday_year,hash 
FROM contacts 
WHERE (
        MATCH( firstname,middlename,lastname,
            primary_emailaddress,alternate_emailaddress,personal_address_line1,
            personal_address_line2,personal_address_city,facebook_username,
            twitter_username,googleplus_username,linkedin_username,
            personal_website_url,birthday_month,notes ) AGAINST ('\\*' IN BOOLEAN MODE) 
        OR personal_address_zipcode REGEXP('(\\*)') 
        OR company_address_zipcode REGEXP('(\\*)') 
        OR home_phonenumber REGEXP('(\\*)') 
        OR company_phonenumber REGEXP('(\\*)') 
        OR cell_phonenumber REGEXP('(\\*)') 
        OR birthday_day REGEXP('(\\*)') 
        OR birthday_year REGEXP('(\\*)') 
    ) 
AND addressbook_id = 4

1 个答案:

答案 0 :(得分:0)

问题是默认情况下非常短的单词没有编入索引。 Here是文档:

  

要索引的单词的最小和最大长度由。定义   ft_min_word_len和ft_max_word_len系统变量。 (见章节   5.1.4,“服务器系统变量”。)默认最小值为四个字符;默认最大值取决于版本。如果你改变了   要么是值,你必须重建你的FULLTEXT索引。例如,如果   你想要搜索三个字符的单词,你可以设置   通过在选项中添加以下行来ft_min_word_len变量   文件:

[mysqld]
ft_min_word_len=3

这适用于布尔搜索以及自然语言。您需要更改选项以重建索引。

或者,您可以为regexp添加firstname表达式:

    OR firstname REGEXP('(\\*)')