5

lucene でいくつかの RDBMS 機能を実現できるかどうかは疑問です。

例: 1) 10,000 個のプロジェクト ドキュメント (pdf ファイル) があり、それらのコンテンツを検索できるようにインデックスを作成する必要があります。2) すべてのドキュメントは SINGLE PROJECT に関連付けられています。プロジェクトには、プロジェクト名、番号、開始日、終了日、場所、タイプなどの詳細を含めることができます。

特定のキーワードでpdfファイルの内容を検索する必要がありますが、結果を表示しながら、ポイント(2)で述べたようにプロジェクトのメタデータを表示したいと考えています。

私の考えは、索引付け中に projectId というフィールドを各 pdf ファイルに関連付けることです。それを取得したら、プロジェクトのメタデータを取得するために検索を再度実行します。

このようにして、データの重複を避けることができました。また、プロジェクトのメタデータを更新したい場合は、単一の場所でのみ更新することになります。それ以外の場合、このメタデータをすべての pdf ドキュメント インデックスと共に保存すると、すべてのドキュメントが更新されてしまいます。これは、私が探している方法ではありません。

お知らせ下さい。

4

5 に答える 5

1

私の理解が正しければ、次の 2 つの質問があります。

  1. プロジェクト ID を Lucene に保存して、さらに検索するために使用できますか? はい、できます。これは一般的な方法です。
  2. このプロジェクト ID を使用して Lucene でプロジェクトのメタデータを検索できますか? はい、できます。これが良い考えかどうかはわかりません。これは、メタデータの更新頻度とアクセス パターンによって異なります。メタデータが比較的静的で、ID によってのみアクセスする場合は、Lucene が保存場所として適している可能性があります。それ以外の場合は、プロジェクト ID をデータベース テーブルの主キーとして使用できます。これは、より適している可能性があります。
于 2009-05-06T12:28:27.883 に答える
1

これは間違いなく可能です。ただし、意図していない目的で Lucene を使用しているという事実に常に注意してください。一般に、Lucene は全文検索用に設計されており、リレーショナル コンテンツのマッピング用には設計されていません。システムのリレーショナル コンテンツが複雑になるほど、パフォーマンスが低下します。

特に、注意すべき点がいくつかあります。

  • 各フィールドの値をインデックスに格納すると、パフォーマンスが低下します。1 秒未満の検索結果をあまり気にしない場合、またはインデックスが比較的小さい場合、これは問題にならない可能性があります。
  • また、デフォルトのランキング アルゴリズムを使用しておらず、カスタム アルゴリズムが各ドキュメントのスコアを計算するためにプロジェクトに関する情報を必要とする場合、これは検索パフォーマンスにも劇的な影響を与えることに注意してください。

リレーショナル コンテンツ用に設計されたより強力なインデックスが必要な場合は、検討する価値のある階層インデックス作成ツール (Apache によって開発されたもの、 Jackrabbitと呼ばれるもの) があります。

プロジェクトが成長し続けるにつれて、多面的な検索などの追加機能を提供する Apache によって開発されたSolrも確認できます。

于 2009-08-26T03:06:17.577 に答える
1

全体的な設定についてはわかりませんが、 Hibernate Searchが適しているかもしれません。これにより、リレーショナル データベースの利点と Lucene のような全文検索エンジンの機能を組み合わせることができます。メタ データはデータベース内に、元の pdf ドキュメントと一緒に存在する可能性がありますが、Lucene ドキュメントには検索可能なデータが含まれているだけです。

于 2009-06-16T14:33:59.537 に答える
1

そのように Lucene を使用できます。

長所:

全文検索は簡単に実装できますが、RDBMS ではそうではありません。

短所:

参照整合性: RDBMS では無料で取得できますが、Lucene では自分で実装する必要があります。

于 2009-08-28T20:31:33.383 に答える
1

完全に良いことのように聞こえます。(プロジェクト データ自体ではなく、プロジェクトへの参照を Lucene に格納することによって) 唯一の制限は、ドキュメント テキストとプロジェクト メタデータの両方を同時にクエリできないことです。たとえば、 "documentText:foo OR projectName:bar" . そのような要件がない場合は、データベースの行を参照する Lucene に ID を保存するのが良いようです。

于 2009-05-08T16:00:00.033 に答える