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

mysql全文検索の失敗

    -- drop table testproduct;
    CREATE TABLE testproduct
    (
        Id                VARCHAR(16),
        prod_name           TEXT,
        ProductIdType     VARCHAR(8),
      PRIMARY KEY (Id),
      FULLTEXT (prod_name)
    ) ENGINE=MyISAM;
    
    insert into testproduct (id,prod_name,productidtype) values ('B00005N5PF','one pen and a good price for a pen','ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('B570J5XS3C',null,'ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('C00ZZ5N5PF','let us get rid of some noise','ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('D00LL5N5PA','four score and seven years ago our fore...','ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('EEEZZ5N5PF','he has a harpoon','ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('C01ZZ5N5PF','and then we','ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('B00ZZ5N5PF','he has a pen in his pocket not a banana','ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('C02ZZ5N5PF','went to the store','ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('C03ZZ5N5PF','and decided that we should buy some','ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('C04ZZ5N5PF','fruit cups or fruit or berries or pebbles','ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('C037Z5N5PF','then he and her she and it','ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('C04K95N5PF','threw some daggers and a harpoon','ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('D88895N5PF','more noise and some of this','ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('D34595N5PF','this article about harpoons really drills into the throwing of harpoon or harpoons to those that deserve a harpoon','ASIN');
    insert into testproduct (id,prod_name,productidtype) values ('D12395N5PF','and there we go','ASIN');
    

    全文検索は、繰り返される「ノイズ」を取り除くために、いくつかの多様性を必要とします。最小限のデータでテストすると、不十分な結果になります。意味のあるものが出てくるように、コレクション全体を投げてください。以下のいくつかのリンクに見られるように、検索しようとしても単語の最小サイズの設定があります。

    ストップワード

    MySql ストップワードのリスト があります 検索プロセス中にスキップされた重要でない単語を表すさまざまな言語で。そのリストはサーバーにコンパイルされますが、このマニュアルページ およびテキスト:

    デフォルトのストップワードリストを上書きするには、ft_stopword_fileシステム変数を設定します。 (セクション5.1.4「サーバーシステム変数」を参照してください。)variablevalueは、ストップワードリストを含むファイルのパス名、またはストップワードフィルタリングを無効にするための空の文字列である必要があります。別のディレクトリを指定するために絶対パス名が指定されていない限り、サーバーはデータディレクトリでファイルを検索します。この変数の値またはストップワードファイルの内容を変更した後、サーバーを再起動し、FULLTEXTインデックスを再構築します。

    いくつかのサンプルクエリ

    -- select * from testproduct
    SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('score' IN BOOLEAN MODE);
    SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('harpoon' IN BOOLEAN MODE);
    SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('banana' IN BOOLEAN MODE);
    SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('years' IN BOOLEAN MODE);
    

    複数の単語を一致させるには:

    SELECT id,prod_name, match( prod_name )
    AGAINST ( '+harpoon +article' IN BOOLEAN MODE ) AS relevance
    FROM testproduct 
    ORDER BY relevance DESC
    

    relevanceに実際の重みを与える 列:

    SELECT id,prod_name, match( prod_name )
    AGAINST ( '+harpoon +article' IN NATURAL LANGUAGE MODE) AS relevance
    FROM testproduct 
    ORDER BY relevance DESC
    +------------+--------------------------------------------------------------------------------------------------------------------+--------------------+
    | id         | prod_name                                                                                                          | relevance          |
    +------------+--------------------------------------------------------------------------------------------------------------------+--------------------+
    | D34595N5PF | this article about harpoons really drills into the throwing of harpoon or harpoons to those that deserve a harpoon | 3.6207125186920166 |
    | EEEZZ5N5PF | he has a harpoon                                                                                                   | 1.2845110893249512 |
    | C04K95N5PF | threw some daggers and a harpoon                                                                                   | 1.2559525966644287 |
    |------------+--------------------------------------------------------------------------------------------------------------------+--------------------+
    

    こちら から複数の単語のセクションを削除しました 。ありがとうスペンサー




    1. SQLServerバックアップチェック

    2. MySQLで1日あたりの新規ユーザーを獲得する方法

    3. MySQLのLEN()と同等のものは何ですか?

    4. 現実世界の問題を解決するための単純なSQLServer関数