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

ファジールックアップを使用してSQLで文を見つける方法は?

    これは簡単な質問ではありません。最善の策は、ある種の全文検索 。全文検索は、ストップワード(検索から省略された単語-単語theなど)を持つように構成できます。 )また、最小の単語長制限を設定することもできます(特定の文字より短い単語も検索から除外されます。

    ただし、単に使用する場合

    SELECT * FROM testtable
    WHERE MATCH (sentence)
    AGAINST ('ISBN number on site');
    

    次に、MySQLは、探していた値のレコードだけでなく、一部の単語のみを含むレコードを異なる順序で返します。あなたが見せたものはおそらく最高ランクのものになるでしょうが、それが最高ランクのものになるという保証はありません。

    ブール全文検索 を使用することをお勧めします +を前に付けます すべての検索ワードに対して、すべての検索ワードが存在するレコードのみをMySQLに返すように強制します。

    SELECT * FROM testtable
    WHERE MATCH (sentence)
    AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);
    

    ただし、on ストップワード(デフォルトのstipwordリストにある)であるか、最小単語長よりも短い必要があるため、検索式から除外する必要があります(結果は返されません):

    SELECT * FROM testtable
    WHERE MATCH (sentence)
    AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);
    

    これには検索式の変更が必要であることは知っていますが、MySQLの組み込み機能を使用すると最良の結果が得られます。

    別の方法は、 sphinx 検索を実行します。



    1. Postgresql-大きなデータベースで配列を使用するパフォーマンス

    2. OracleUNIONのさまざまな列

    3. Postgresqlはスーパーユーザーとして「createdb」を使用してdbを作成していませんが、エラーを出力していません

    4. RESTfullの方法でデータベース列のnullエントリをカウントします