LuceneやSolrを使用して、RDBMS を利用した Web アプリケーションで検索を提供することを検討しています。私にとって残念なことに、私がざっと調べたすべてのドキュメントは、インデックスからデータを取得する方法を扱っています。私は、有用なインデックスを構築する方法に関心があります。これを行うための「ベストプラクティス」はありますか?
4 に答える
複数のアプリケーションがデータベースに書き込みますか?もしそうなら、それは少しトリッキーです。Luceneインデクサーにフィードする新しいレコードを識別するためのメカニズムが必要です。
考慮すべきもう1つのポイントは、すべてのテーブルをカバーする1つのインデックスが必要か、それともテーブルごとに1つのインデックスが必要かということです。一般に、レコードがどのテーブルからのものであるかを示すために、そのインデックスにフィールドを持つ1つのインデックスをお勧めします。
非構造化ドキュメントではなく永続オブジェクトを検索する場合、 Hibernateは全文検索をサポートしています。
Compassと呼ばれるOpenSymphonyプロジェクトがあり、そのことに注意する必要があります。主に検索が必要なよりもはるかに複雑であるように思われるため、私はそれを自分で避けてきました。また、ドキュメントからわかるように(すべてを読むのに必要な時間が見つからなかったと告白します)、Luceneセグメントをブロブとしてデータベースに格納します。Luceneアーキテクチャに精通している場合、Compassはデータベースの上にLuceneディレクトリを実装します。これは間違ったアプローチだと思います。データベースに組み込まれているインデックス作成のサポートを活用し、代わりにLuceneIndexReaderを実装します。同じ批判が分散キャッシュの実装などにも当てはまります。
これについてはまったく調べていませんが、LuSqlを見てください。
Solr を使用するのも簡単ですが、Solr の schema.xml と実際のデータベース スキーマにはいくつかのDRY違反があります。(参考までに、Solr はワイルドカードをサポートしています。)
はじめに:
Brian McCallisterは、素晴らしいブログ投稿を書きました:OJBでのLuceneの使用。
今夜、Solr を使用する最初のアプリケーションを展開します。Solr 1.3 には、データベース テーブル (エンティティと呼ばれます) とその関係を指定できる DataImportHandler が含まれています。定義が完了すると、単純な HTTP リクエストによってデータのインポートがトリガーされます。