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