2009-07-07 72 views
2

想象一下全文搜索的這種簡單場景:帶評論的文章。我想通過評論中的文字搜索文章。這一點很容易實現。Lucene和訪問控制(評論的可見性)

儘管如此,並非所有的評論都是可見的。寫評論的用戶還可以限制其對具體角色的可見性(所以評論有2個字段:文本和角色)。

是否有可能限制對文章的lucene搜索,使其只能看到當前用戶可見的註釋(comment.role位於當前用戶角色的集合內)?

如果是這樣,請指向正確的方向,我應該如何去做,並寫出這樣的查詢(最好)或lucene過濾器。

(我使用Lucene通過Hibernate搜索,但它應該沒有什麼區別)

回答

2

按照docs,你可以給你有興趣在查詢另一個領域的作用。在你的例子中,類似這樣的東西應該工作:

text:"user query" AND role:"userRole" 
+0

感謝您的回答。它雖然沒有幫助。問題是我搜索文章,而不是評論。在lucene索引中,每篇文章都有多個字段comment.text和comment.role,但是來自某個特定評論的comment.text和comment.role沒有關聯。我怎樣才能把它們粘在一起? – rdk 2009-07-08 11:20:28

0

添加到joeslice的答案。如果角色層次結構中角色的權限將該權限級聯到層次結構中的其他角色。例如,如果授予角色「經理」的許可,則導致允許「導演」&「副總裁」。

在這種情況下,您的查詢就會

text:"user query" AND (role:"role1" OR role:"role2" OR role:"role3") 
0

我想不出什麼好的解決這種情況,但我可以想出一些壞的...

問題lucene並沒有提供除文檔字段機制以外的任何層次結構支持。

最好的辦法是爲每條評論創建一個單獨的文檔。這樣,每個文檔都有一個「文本」和一個「角色」字段,因此您知道該角色適用於文本。

問題是,現在你在評論和文章之間沒有很好的關聯,例如,如果你有一篇文章中包含單詞「hibernate」,包含單詞「lucene」的評論,那麼搜索對於「hibernate和lucene」不會找到它。您可以嘗試通過在每個文檔中包含文章和所有註釋作爲額外字段來改善這一點,但是您會有一個非常龐大的索引,並且可能存在安全隱患。

另一種方式來處理,這是已經編號的像comment1comment2等領域。然後你可以用comment1匹配role1。如果您對某篇文章有不止一條評論,這會讓您的查詢變得很大且效率低下。