0

我有一个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
4

1 回答 1

0

问题是,默认情况下,非常短的单词不会被索引。 是文档:

要索引的单词的最小和最大长度由 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('(\\*)') 
于 2013-07-30T01:28:10.503 回答