2

MySql の非常に大きなテーブルの列のコンテンツの検索を実装するには、どの手法を使用しますか? たとえば、データベースのテーブルに 10.000.000 件の電子メールが保存されていて、件名検索を実装したいとします。これにより、電子メールの件名に含まれる 1 つまたは複数の単語を検索できるようになります。ユーザーが「クリスマス サンタ」を検索した場合、「今年のクリスマスにサンタさんが来てくれました」や「クリスマス、サンタさんは来ますか」などの件名のメールが見つかるはずです。

私の考えは、件名のすべての単語を処理し (すべての数字、特殊記号、コンマなどを取り除く)、単語列に一意のインデックスがあるインデックス テーブルに各単語を保存することです。次に、多対多の関係テーブルによって、それをメール テーブルにリンクします。

非常に大きなテーブルでワイルドカード検索を実行するより良い方法はありますか?

この種の検索をネイティブにサポートするデータベースはありますか?

4

6 に答える 6

8

MyISAM をストレージ エンジンとして使用している場合は、FULLTEXT インデックスを使用できます。ただし、MySQL は一般に、テキスト検索にはあまり適していません。

LuceneSphinxなどの専用のテキスト インデックス作成ソリューションを使用することをお勧めします。個人的には、Sphinx をお勧めします。これは、PHP および MySQL との優れた統合があり、非常に高速です (通常のクエリでさえ高速化するために使用できます。非常に高速なグループ化と順序付けを実行します)。

ウィキペディアには、さまざまなインデックス エンジンの優れたリストがあります

于 2008-12-16T22:44:00.167 に答える
2

MySQL の MyISAM テーブルFULLTEXTは、この種の検索に役立つインデックスをサポートしています。

しかし、これはこの種の検索に利用できる最速のテクノロジーではありません。また、InnoDB テーブルに格納されたデータには使用できません。

Sphinx Searchについていくつか良いことを聞いたことがありますが、まだ使用していません。

Sphinx に関する別のブログはこちら: http://capttofu.livejournal.com/13037.html

于 2008-12-16T22:40:19.410 に答える
1

mysqlフルテキストインデックスは可能ですが、Luceneのような検索エンジンとして設計されたものを使用することを検討すると思います。

于 2008-12-18T03:20:40.420 に答える
0

MATCH...AGAINST関数を見てみたい。

例: MySQL 全文検索の使用

于 2008-12-16T22:41:45.493 に答える
0

これは、SQL Server がサポートする全文検索のように思えます。

しかし、あなたの考えは一般的に正しいです。検索を高速化するために、事前にテーブルの「インデックス」を効果的に計算しています。

于 2008-12-16T22:35:20.170 に答える
0

MySQLドキュメントで「全文検索」を確認してください(AFAIK、現在のすべてのDBMSがこれをサポートしています)

于 2008-12-16T22:36:07.360 に答える