2009-04-27 18 views
1

私はLucene.netを使用してCMSのコンテンツやドキュメントなどのインデックスを作成します。これは、これまでも取り組んできましたが、今私は、Webページに以下の追加のアカウントを取るために持っている:Luceneの文書にはどうすればいいですか?

  1. 有効期限を公開
  2. ページ
  3. ユーザー認証「アクティブです」

したがって、検索結果には[公開/有効期限]ウィンドウ内のページのみが表示され、「アクティブ」であり、現在のユーザーには表示が許可されている必要があります。

Luceneインデックスに上記の情報を含める必要がありますか?クエリは少し複雑になりますが、ヒットコレクションは「有効な」ドキュメントのみを返し、ページングの結果をより簡単にします。

一方、私は私のデータの整合性を危険にさらすことになりますので、CMSデータベースにすでにある情報を繰り返すことになります、と私は上記のリストに何かが変更されるたびにインデックスを更新しています実際のコンテンツそのものが含まれます。

他にもこの問題がありましたか?どのように解決しましたか?ありがとう。

編集:私は「FieldCache」を使用する必要があるかもしれませんがLucene検索に「有効」ドキュメントIDを渡す(hereを述べましたか)?検索結果の公開 /有効期限のウィンドウ内にあるべきであるだけ ショーのページ..so

答えて

1

最初にCMSデータベースを照会し、一致するすべてのドキュメントをBitSetでビルドします(Luceneの内部ドキュメントIDを使用してアプリケーションのドキュメントIDを変換するにはFieldCacheが必要です)。次に、フィルタ(BitSetをラップする)を使用して、インデックスに対してLuceneクエリを実行できます。

データベース内のすべての変更可能なデータ(所属する場所)を保持し、インデックスの更新や再構築について心配する必要はありません。これは非常に速く実行されます。

P.S.私は唯一のLuceneのJavaバージョンを使用しましたが、これはLucene.NETで正常に動作する必要があります

0

、「アクティブ」と、現在のユーザーが ビューに許可されて ことです。

認証の問題を処理する方法はいくつかあります。複数の索引(権限レベルごとに1つずつ)を維持したり、照会で結果をフィルターに掛けたり(必要な許可を保管して)、結果をフィルターに掛けることができます。わずかなレベルしかない場合は、別のインデックスを維持すると思います。最も安全です。

「アクティブです」 - あなたはそれを念頭に置いてインデックスを再構築できますか?バックグラウンドでインデックスを頻繁に再構築し、アクティブなコンテンツのみを追加するだけです。あなたはそれを実行可能にするにはあまりにも多くの情報を持っているかもしれませんが、Luceneは非常に高速です。

+0

私の好みは、定期的にインデックス(Luceneのドキュメント<10,000)再構築するために勝利のサービスを使用することですが、アプリの要件が変化していることを指示コンテンツ/ページなどに作られました。検索結果にすぐに反映されます – Nick

+0

うん。とにかく愚かな要件:あなたが定期的にあなたのインデックスを更新する機会を得ない限り - それはあなたがインデックスからそれらを取得した後にあなたの結果をフィルタリングしているように見えます。 –

関連する問題