2

PostgreSQLでは、このように全文検索に基づいてテーブルを検索できます-

SELECT title
FROM pgweb
WHERE to_tsvector('english', body) @@ to_tsquery('english', 'friend');

ソース-http://www.postgresql.org/docs/current/static/textsearch-tables.html

PostgreSQLで非常に簡単に実行できるMySQL5.5で同様の検索を実行するにはどうすればよいですか?

4

1 に答える 1

3

MySQLの全文検索機能が必要になる可能性があります。基本的に、FULLTEXTインデックスを作成し、を使用してそれを検索しMATCH() ... AGAINSTます。

MySQLでクエリごとに検索言語を設定する機能を知りませんが、そのようなサポートが存在しないという意味ではありません。クエリごとの言語設定が要件であるかどうかは明確ではありませんでした。

MySQLの最新の安定したリリースは、最新のトランザクションおよびクラッシュセーフなInnoDBテーブルタイプと、安全でないMyISAMテーブルタイプでの全文検索をサポートしています。MySQLがMyISAMでのみFTSを実行する場合は、アップグレードする必要があります。5.6は、InnoDBでの全文検索をサポートしています。

または、本当にアップグレードできない場合は、重要なデータをInnoDBテーブルに保存し、定期的なクエリを実行して、全文検索専用のマテリアライズドビューとして使用するMyISAMテーブルを更新できます。

  • 新しいMyISAMテーブルを作成します
  • INSERT INTO ... SELECTInnoDBテーブルから新しいMyISAMテーブルへのデータ
  • CREATE新しいMyISAMテーブルのフルテキストインデックス
  • DROPフルテキストインデックス作成に使用していた古いMyISAMテーブル。と
  • 最後にALTER TABLE ... RENAME、新しいMyISAMテーブルに古いテーブルの名前を付けます。

古いテーブルを削除してから新しいテーブルを再作成するまでの間に、フルテキストインデックスが使用できない非常に短いウィンドウが表示されます。データも古くなり、ビューの更新の間に古くなりますが、トリガーを使用して回避することは可能です(MySQLを十分に使用していません)。これらの制限に耐えられない場合は、5.6にアップグレードしてください。

MySQLの全文検索では、ストップワードやその他の調整を制御できます。それはうまく仕事をするはずの堅実な製品です。

于 2013-03-22T10:27:36.670 に答える