6

アプリケーションのドメイン モデル オブジェクトに変更が加えられたときに Lucene インデックスを最新の状態に保つことについて、人々の考えを知りたいと考えていました。

問題のアプリケーションは、Hibernate を使用する Java/J2EE ベースの Web アプリです。私が現在取り組んでいる方法は、Hibernate マップ モデル オブジェクトがすべて、Lucene に記録されたキーと値のペアのセットを返すことができる共通の「インデックス可能」インターフェイスを実装することです。そのようなオブジェクトを含む CRUD 操作が実行されるたびに、JMS キューを介してメッセージ駆動型 Bean に送信します。メッセージ駆動型 Bean は、Lucene にオブジェクトの主キーと、そのオブジェクトの index( ) メソッドから返されたキーと値のペアを記録します。提供された。

このスキームに関する私の主な懸念は、MDB が遅れて、入ってくるインデックス作成操作に追いつかないか、何らかのエラー/例外がオブジェクトのインデックス作成を停止するかどうかです。その結果、一定期間、または長期間にわたって古いインデックスが作成されます。

基本的に、私は、この種のことに対して他の人がどのような戦略を思いついたのか疑問に思っていました. 必ずしも1つの正解を探しているわけではありませんが、「ホワイトボード」のようなアイデアのリストを想像して、脳に代替案を考えさせています.

4

2 に答える 2

4

メッセージを変更します。キーと値のペアではなく、主キーと現在の日付のみを指定してください。あなたのmdbは主キーでエンティティを取得し、index()を呼び出します。インデックスを作成した後、インデックスの値「updated」をメッセージの日付に設定します。メッセージの日付がインデックスの「更新済み」フィールドより後の場合にのみ、インデックスを更新します。この方法では、常に現在のキーと値のペアを最初にフェッチするため、遅れることはありません。

別の方法として、http://www.compass-project.orgをご覧ください。

于 2008-09-01T17:26:13.630 に答える
0

受け入れられた答えは現在8歳で、非常に時代遅れです。

Compass Project は、その主な開発者が優れた Elasticsearch を作成するために移動したため、長い間メンテナンスされていません。

これに対する最新の答えは、Hibernate Searchを使用することです。これは、ちなみに Lucene インデックスに直接または Elasticsearch を介してマップできます。

于 2017-03-09T12:51:18.183 に答える