我有一个类别列表,例如1000,1001,1002,1003等......用户只能访问其中一些类别。我想根据用户有权访问的类别过滤我的lucene.net搜索结果,或者忽略他们无法访问的项目的结果。
我尝试过使用Lucene FieldCacheTermsFilter,但这根本不会返回任何结果:
New Lucene.net.search.FieldCacheTermsFilter("category", {"1000", "1002"} )
是否有更好的方法根据列表中存在值的特定字段过滤结果?
答案 0 :(得分:1)
我通过在所有情况下围绕我的主查询使用BooleanQuery包装来解决这个问题。
我使用了我的原始搜索查询(MainQuery),并使用happen.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 )
这不使用过滤器,所以我不确定这是否是性能最佳的选项。但它确实有效。