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

Ubuntuでのmysqlft_min_word_lenの変更が機能しない

    問題と修正を見つけることができました。

    全文検索の設定は、東2語で検索したかったので、ft_min_word_len = 2でしたので良かったです。

    さらにテストを行っていると、ランダムに2文字の単語が検索され、他の単語は無視されることがわかりました。

    これが例です

    CREATE TABLE articles (
        id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
        title VARCHAR(200),
        body TEXT,
        FULLTEXT (title,body)
    );
    
    INSERT INTO articles (title,body) VALUES
    ('MySQL Tutorial','DBMS stands for DataBase ...'),
    ('How To Use MySQL Well','After you went through a ...'),
    ('Optimizing MySQL','In this tutorial we will show ...'),
    ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
    ('MySQL vs. YourSQL','In the following database comparison ...'),
    ('MySQL Security','When configured properly, MySQL ...');
    
    mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('use');
    Empty set (0.00 sec)
    
    mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('Use');
    Empty set (0.00 sec)
    
    mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('you');
    Empty set (0.00 sec)
    
    mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('the');
    Empty set (0.00 sec)
    
    mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('vs.');
    Empty set (0.00 sec)
    

    しかし、次の作品

    mysql> SELECT * FROM articles
        -> WHERE MATCH (title,body) AGAINST ('run');
    +----+-------------------+-------------------------------------+
    | id | title             | body                                |
    +----+-------------------+-------------------------------------+
    |  4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... |
    +----+-------------------+-------------------------------------+
    

    それで、それは別のものであり、明らかにそのft_stopword_fileを見つけました 単語のリストがあり、そのうちの1つで検索が行われた場合は何もしません。

    リストはここにあります http://dev.mysql.com /doc/refman/5.1/en/fulltext-stopwords.html

    したがって、この場合、少なくとも2文字の長さの単語検索を許可します

    • ft_min_word_lenを2に設定します
    • 次に、mysql構成ファイルで、debian/etc/mysql/my.cnfにft_stopword_file ='path / to / stopword_file.txt'を追加します。
    • 必要に応じて、このファイルを空白のままにすることができます。

    上記の設定を行ったら、mysqlを再起動する必要があり、ft_min_word_lenを変更した場合はもう1つ 次に、インデックスを再構築するか、テーブルを修復する必要があります。




    1. Pythonの実行可能なデータベース抽象化レイヤーは何ですか

    2. OracleDatabaseでのOracleJDeveloper12cの使用、パート2

    3. postgreSQLで既存のテーブルのcreatetablesqlステートメントを生成する方法

    4. plsqlでユーザーのパスワードが有効かどうかを確認してください