2

全文検索のこの単純なシナリオを想像してみてください:コメント付きの記事。コメントのテキストでも記事を検索したい。それだけでも実装はかなり簡単です。

ただし、すべてのコメントがすべてのユーザーに表示されるわけではありません。コメントを書き込むユーザーは、コメントの表示を具体的なロールに制限することもできます(したがって、コメントにはテキストとロールの2つのフィールドがあります)。

記事のlucene検索を制限して、現在のユーザーに表示されるコメントの内部のみを表示することはできますか(comment.roleは現在のユーザーのロールのセット内にあります)?

もしそうなら、私に正しい方向を示してください。どのようにすればよいのでしょうか。そのようなクエリ(できれば)またはluceneフィルターを記述してください。

(私は休止状態検索でluceneを使用していますが、違いはありません)

4

3 に答える 3

2

docsによると、関心のある役割をクエリの別のフィールドとして指定できます。あなたの例では、次のようなものが機能するはずです:

text:"user query" AND role:"userRole"
于 2009-07-07T18:19:29.317 に答える
0

この状況に対する良い解決策は考えられませんが、いくつかの悪い解決策を思いつくことができます...

問題は、luceneが実際にはドキュメントフィールドメカニズム以外の階層サポートを提供しないことです。

最善の策は、コメントごとに個別のドキュメントを作成することです。このように、すべてのドキュメントに1つの「テキスト」フィールドと1つの「役割」フィールドがあるため、役割がテキストに適用されることがわかります。

問題は、コメントと記事の間に適切な関連付けがないことです。たとえば、「hibernate」という単語を含む記事と「lucene」という単語を含むコメントがある場合、「hibernate AND lucene」はそれを見つけられません。記事とすべてのコメントをすべてのドキュメントの追加フィールドとして含めることでこれを改善することができますが、そうすると、インデックスが非常に肥大化し、セキュリティに影響を与える可能性があります。

comment1これにアプローチする別の方法は、などのような番号付きのフィールドを用意comment2することです。次に、と一致role1させることができますcomment1。記事にコメントが数個以上あると、クエリが大きく非効率になります。

于 2009-07-09T08:48:50.650 に答える
0

joeslice の回答に追加します。ロールへの権限が階層内の他のロールにその権限をカスケードするロールの階層がある場合。たとえば、ロール「マネージャー」の権限が付与された場合、「ディレクター」と「副社長」の権限も付与されます。

この場合、クエリは次のようになります

text:"user query" AND (role:"role1" OR role:"role2" OR role:"role3")
于 2009-07-08T05:27:44.233 に答える