2017-05-05 46 views
1

我有一個類別列表,例如, 1000,1001,1002,1003等等,用戶只能訪問其中的一些類別。我想僅根據用戶有權訪問的類別過濾我的lucene.net搜索結果,或者省略他們無權訪問的項目的結果。使用Lucene過濾器來限制基於列表的項目

我已經使用了Lucene FieldCacheTermsFilter嘗試,但這種不返回任何結果都:

New Lucene.net.search.FieldCacheTermsFilter("category", {"1000", "1002"}) 

有沒有更好的方法基於具有存在於一個列表中的值的特定字段篩選結果?

回答

1

我解決了這個問題,通過在所有情況下在我的主要查詢周圍使用布爾查詢包裝器。

我把我的淵源搜索查詢(MainQuery),並使用occur.must用於創建一個新的BooleanQuery和我的安全查詢如下:

dim SecurityQuery as New lucene.net.search.BooleanQuery() 
For Each id as string in AllowedIDs 
    q.Add(New TermQuery(New Lucene.Net.Index.Term("category", s)), Occur.SHOULD) 
Next 

Dim FinalQuery As New lucene.net.search.BooleanQuery() 
FinalQuery.Add(MainQuery, occur.must) 
FinalQuery.Add(SecurityQuery, occur.must) 

這不使用過濾器,所以我不確定至於這是否是表現最佳的選擇。但它的工作。