2009-07-19 16 views
1

私はasp.net MVCフレームワークに基づいてWebプロジェクトをやっています。 dbとして私はpostgre SQLを使用しています。質問は私のアプリケーションで検索を整理する方法です。 1つのオプションは、lucene.netなどの.netライブラリを使用することです。もう一つの選択肢は、Postgreのフルテキスト検索を使うことです。最適な選択肢は何ですか?postgres全文検索

答えて

3

私はプロダクションではpostgresを実行していませんが、かなりの量のデータを使ってテストDBで試しています。約600,000行のテキスト文字列を索引付けすると、3ワードの平均で120MBのフルテキスト索引が作成されます。クエリは、の後、の後に各検索語句の最初のものがこのインデックスに対して非常に高速です。各用語の索引をディスクからメモリに引く必要があるようです。私は起動時にインデックス全体をメモリに取り込む方法をまだ見つけていません。私は単一のラップトップHDで動作しているので、最初の遅さのいくつかはディスクIO関連かもしれません。また、120MBのインデックスに120MB以上のDBメモリが必要かどうかもわかりません。

生産用アプリケーションでは、Lucene for Javaを使用しており、数GBのインデックスデータで非常に良好な応答を示しています。 Luceneの利点は、1)DBに依存せず、2)配布可能であることです。 #1の場合、これは問題ではないかもしれませんが、基礎となるDBの種類にかかわらず同じインデックスコードを使用できることを意味します。 #2の場合は、アプリケーションの大きさによって異なります。 Lucene(とHadoopは特に)はマルチスレッドに設計されているので、インデックスを共有ドライブに格納して複数のマシンで同時に検索を実行できます(インデックスはまだシングルスレッドです)。あなたが望むかどうかは、あなたのアーキテクチャが何であるかによって決まります。あなたはむしろ1つの大きなDBまたは1つの中小DBとそれをサポートするいくつかの小さなインデックスサーバーを持っていますか?