質問

制限や落とし穴、アンチパターン、落とし穴は何ですか?

それはかなり魅力的なようです。明らかに、ほとんど作業なしで検索エンジンを作成できます。しかし、問題なくしてはいけません...

あなたの経験はどうですか?

役に立ちましたか?

解決

私の意見では、最大の欠点は、MySQLのフルテキストインデックスがMyISAMテーブルに限定されていることです。 InnoDBテーブルとは異なり、これらには多くの重要な機能がありません。トランザクション。

他のヒント

  

問題なくしてはいけません...

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

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

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

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

<!>#8216;単語文字<!>#8217の選択;あなたのニーズを満たしていない可能性があり、変更するのは難しいです。たとえば、<!>#8220; Terry <!>#8221;を検索します。 <!>#8220; Terry's <!>#8221;とは一致しません。一般に、ステミングの種類はサポートされていないため、<!>#8220; biscuit <!>#8221; <!>#8220; biscuits <!>#8221;とは一致しませんどちらか。

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

予備のストレージがある場合、できることは、メインの標準バージョンのデータをInnoDBテーブルに配置し、フリーテキストコンテンツのコピーを含む別のMyISAMテーブルを作成することです。サーチベイト。変更時に両方のテーブルを更新する必要がありますが、MyISAMテーブルの整合性が失われた場合、少なくとも実際のライブデータを大量に収集してアプリケーションエラーを取得するのではなく、関連する行を検索する機能のみが失われます。

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

大きなテーブルの場合は、MySQL構成ファイルのバッファーサイズとキャッシュ制限を増やす必要があります。

また、検索で使用するMATCH()列は、インデックスの列と同じである必要があります。

bobinceの非常に良い答えに加えて、フルテキストの制限について説明しているMySQLドキュメントの記事があります。お役に立てれば。 http://dev.mysql.com/doc/refman/5.0 /en/fulltext-restrictions.html (Olafur Waageはすでにこれらの1つについて話しました)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top