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

Mysqlフルテキストインデックスの制限?

    確かにそうではありません!

    純粋にブロックされた単語で構成される検索語は、黙って失敗します。最小/最大長の制限やストップワードファイルが原因で、単語がブロックされる可能性があります。

    デフォルトのストップワードファイルが非常に攻撃的であることがわかりました。これにより、多くの有効な検索が妨げられていました。また、デフォルトの最小の長さである4は、人々が検索したいと思うかもしれない頭字語のために非常に頻繁に使用されていました。 ft_min_word_lenを3に減らし、ストップリストを完全に削除しました(ft_stopword_file ='')。 Doc: http://dev.mysql.com /doc/refman/5.1/en/fulltext-fine-tuning.html

    また、検索クエリを調べて、4文字未満の単語しか含まれていないかどうかを確認し、その場合はLIKE検索にフォールバックすることもできます。アプリケーションレベルでストップリストを回避する簡単な方法はありません。

    「単語文字」の選択はニーズに合わない場合があり、変更するのは難しいです。たとえば、「Terry」を検索しても「Terry's」とは一致しません。一般に、いかなる種類のステミングもサポートされていないため、「ビスケット」は「ビスケット」とも一致しません。

    最後に、cgが述べたように、InnoDBはサポートされていません。この時代では、すべてのデータをMyISAMテーブルに入れたくはありません。

    余裕のあるストレージがある場合は、データのメインの正規バージョンをInnoDBテーブルに配置し、フリーテキストコンテンツのコピーを含む別のMyISAMテーブルを作成します。これは、純粋に検索ベイトとして使用するためのものです。変更時に両方のテーブルを更新する必要がありますが、MyISAMテーブルの整合性が失われると、少なくとも、実際のライブデータを処理してアプリケーションエラーが発生するのではなく、関連する行を検索する機能が失われるだけです。

    その後、サイクルに余裕がある場合は、検索ベイトに独自のテキスト処理を実装し、単語をクエリして、上記の制限のいくつかを回避できます。たとえば、単語文字にしたい文字をエスケープしたり、単語文字にしたくない文字を削除したり、簡単な手動の英語ステミングを実行したりできます。



    1. php oracleclientoci8のインストールの何が問題になっていますか

    2. Oracleで編集可能なビューを作成する

    3. 複数のテーブルをCount()するSQLクエリ

    4. JDBCとMySQLを使用した通信リンク障害の解決