0

firstnameequalsというレコードがあり\ます。何らかの理由で、レコードが返されません。

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「サーバーシステム変数」を参照してください。) デフォルトの最小値は 4 文字です。デフォルトの最大値はバージョンに依存します。いずれかの値を変更した場合は、FULLTEXT インデックスを再構築する必要があります。たとえば、3 文字の単語を検索可能にする場合は、オプション ファイルに次の行を追加して ft_min_word_len 変数を設定できます。

[mysqld]
ft_min_word_len=3

これは、自然言語だけでなくブール検索にも当てはまります。インデックスを再構築するには、オプションを変更する必要があります。

regexpまたは、次の式を入れることもできますfirstname

    OR firstname REGEXP('(\\*)') 
于 2013-07-30T01:28:10.503 に答える