0

ドキュメントのリストを保持するアプリケーションがあります。これらのドキュメントは、Luceneを使用して索引付けされています。資料のキーワードで検索できます。TopDocsをループして、リレーショナルデータベースのID列に関連する(各Luceneドキュメントの)IDフィールドを取得します。これらすべてのIDから、リストを作成します。IDのリストを作成した後、次のSELECTステートメント(JPA)を実行するデータベースクエリを作成します。

SELECT d From Document WHERE id IN (##list of ID's retrieved from Lucene##)

このドキュメントのリストはビュー(GUI)に送信されます。

ただし、一部のドキュメントは非公開であり、リストに含めるべきではありません。したがって、SELECTクエリには、セキュリティチェックを行うための追加のステートメントがいくつかあります。

SELECT d From Document WHERE id IN (##list of ID's retrieved from Lucene##)
AND rule1 = foo
AND rule2 = bar

しかし今、私は疑問に思っています。Luceneの速度を使用してドキュメントをすばやく検索していますが、それでもSELECTクエリを実行する必要があります。だから私はこれのパフォーマンスを失っています:-(...Luceneにはこのマッピングを行うコンポーネントがありますか?またはこの問題に関するベストプラクティスはありますか?大きなプロジェクトはLuceneの結果をリレーションデータベースにどのようにマッピングしますか?ビューが結果をレンダリングする必要があるためですか?

どうもありがとう!

Jochen

4

3 に答える 3

0

luceneを使用してデータベース内のテーブルにインデックスを付けてみませんか?そうすれば、1つのluceneクエリですべてを実行できます。

于 2012-07-05T11:34:10.517 に答える
0

いくつかの提案:

  • Luceneでは、フィルターを使用して、ルールに従って検索結果を絞り込むことができます。
  • Luceneに主キーまたは一意のキー(ID、シリアル番号など)を保存します。次に、リレーショナルデータベースは、一意のキールックアップを作成し、処理を非常に高速にすることができます。
  • Luceneは、ドキュメントのストレージとしても機能します。該当する場合は、Luceneから個々のドキュメントのコンテンツを取得するだけで、リレーショナルデータベースにアクセスする必要はありません。
于 2012-07-05T21:22:00.533 に答える
0

これが大きな問題である場合は、ニーズに合う可能性のあるドキュメントレベルのセキュリティをサポートするManifoldCFを検討する価値があります。

于 2012-07-05T19:59:20.750 に答える