単語が何であるかについてのMySQLの考え方を変更する必要があります。
まず、デフォルトの最小単語長は4です。これは、「C ++」または「cpp」のどちらであっても、4文字未満の単語のみを含む検索語が一致しないことを意味します。これは、ft_min_word_lenを使用して構成できます。 a> 構成オプション、例: my.cfg内:
[mysqld]
ft_min_word_len=3
(次に、MySQLdを停止/開始し、フルテキストインデックスを再構築します。)
次に、「+」はMySQLでは文字とは見なされません。文字にすることはできますが、「fish + chip」という文字列で「fish」という単語を検索できないため、注意が必要です。そして、それは些細なことではありません。MySQLを再コンパイルするか、既存の文字セットをハッキングする必要があります。 セクション11.8.6 ドキュメントの。
はい、そのようなものが一般的な解決策です。「実際の」データを(エスケープせずに)プライマリの決定的なテーブルに保持できます。通常は、ACID準拠のためにInnoDBを使用します。次に、全文検索ベイト用のマングルされた単語のみを含む補助MyISAMテーブルを追加できます。このアプローチを使用して、限定された形式のステミングを実行することもできます。
もう1つの可能性は、短い単語や珍しい文字だけの検索など、MySQLで実行できない検索を検出し、それらの検索のみを単純だが遅いLIKEまたはREGEXP検索にフォールバックすることです。この場合、 ft_stopword_file 空の文字列に変換します。これは、その中のすべてを特別なものとして取得するのは実用的ではないためです。