sql >> データベース >  >> RDS >> Mysql

MATCH()AGAINST()を使用した文字列と数値のMySQL検索

    Fiatが必要な場合 および500 順序が重要でない場所ならどこでも

    SELECT * FROM models MATCH(name) AGAINST('+Fiat +500');
    

    Fiat 500が必要な場合 一緒に、そして

    SELECT * FROM models MATCH(name) AGAINST('+"Fiat 500"');
    

    Fiatが必要な場合 および0個以上の500 、次に

    SELECT * FROM models MATCH(name) AGAINST('+Fiat 500');
    

    500が必要な場合 および0個以上のFiat 、次に

    SELECT * FROM models MATCH(name) AGAINST('Fiat +500');
    

    試してみてください!!!

    UPDATE 2013-01-28 18:28 EDT

    フルテキスト検索のデフォルト設定は次のとおりです

    mysql> show variables like 'ft%';
    +--------------------------+----------------+
    | Variable_name            | Value          |
    +--------------------------+----------------+
    | ft_boolean_syntax        | + -><()~*:""&| |
    | ft_max_word_len          | 84             |
    | ft_min_word_len          | 4              |
    | ft_query_expansion_limit | 20             |
    | ft_stopword_file         | (built-in)     |
    +--------------------------+----------------+
    5 rows in set (0.00 sec)
    
    mysql>
    

    ft_min_word_len > デフォルトでは4です。トークン500の長さは3であるため、インデックスは作成されません。あなたは3つのことをしなければならないでしょう:

    ステップ01:小さい文字列トークン用に構成する

    これを/etc/my.cnfに追加します

    [mysqld]
    ft_min_word_len = 1
    

    ステップ02:mysqlを再起動します

    service mysql restart
    

    ステップ03:modelsのすべてのインデックスのインデックスを再作成します テーブル

    FULLTEXTインデックスを削除して追加するだけです

    または段階的に実行して、事前にどれだけ大きくなるかを確認します

    CREATE TABLE models_new LIKE models;
    ALTER TABLE models_new DROP INDEX name;
    ALTER TABLE models_new ADD FULLTEXT name (name);
    ALTER TABLE models_new DISABLE KEYS;
    INSERT INTO models_new SELECT * FROM models;
    ALTER TABLE models_new ENABLE KEYS;
    ALTER TABLE models RENAME models_old;
    ALTER TABLE models_new RENAME models;
    

    これがうまくいったことに満足したら、実行します

    DROP TABLE models_old;
    

    試してみてください!!!



    1. LAMPアプリケーションでのSQLインジェクションをどのように防止しますか?

    2. 静的関数と潜水艦

    3. Mysql警告コード1592ステートメント形式を使用してバイナリログに書き込まれた安全でないステートメント

    4. asp.netのデータベースから画像を取得します