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

MySQL全文検索でのワイルドカード検索

    残念ながら、MySQLフルテキストインデックスを使用してこれを行うことはできません。 '*nited states'を取得することはできません 左の文字がインデックスの最も重要な部分であるため、インデックスから即座に。ただし、できます 'United Sta*'を検索 。

    // the only possible wildcard full-text search in MySQL
    WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE)
    

    MySQLのフルテキストは、文中の単語全体を検索するときに最高のパフォーマンスを発揮します。それ以外の場合は、Solr などの外部フルテキストエンジンを使用することをお勧めします。 または Sphinx 。 Sphinxはプレフィックスとサフィックスのワイルドカードを許可していると思いますが、他のワイルドカードについてはわかりません。

    MySQLのLIKEに戻ることができます 句ですが、ここでも、LIKE '%nited states'のようなクエリを実行します またはLIKE '%nited Stat%' 、最初の数文字でインデックスを使用できないため、パフォーマンスも低下します。 'United Sta%' および'Unit%States' インデックスは既知の文字の最初の束に対して使用できるため、問題ありません。

    MySQLのフルテキストインデックスを使用するもう1つの非常に重要な注意点は、ストップワードリストと最小単語長の設定 。たとえば、共有ホスティング環境では、4文字以上の単語に制限されます。したがって、「Goo」を検索して「Google」を取得すると失敗します。 ストップワードリスト また、「and」、「maybe」、「outside」などの一般的な単語も禁止されています。実際には、548個のストップワードがすべて一緒にあります。繰り返しになりますが、共有ホスティングを使用していない場合、これらの設定は比較的簡単に変更できますが、使用している場合は、デフォルト設定の一部に悩まされることになります。




    1. ページを複数回リロード/更新するときにmax_user_connectionsを超えないようにするにはどうすればよいですか?

    2. node.js postgresqlモジュールを使用する適切な方法は何ですか?

    3. PHP/MySQLの特殊文字

    4. MySQL出力マスキング(つまり、電話番号、SSNなどの表示フォーマット)