使用Lucene过滤器根据列表限制项目

时间:2017-05-05 09:56:16

标签: search lucene lucene.net

我有一个类别列表,例如1000,1001,1002,1003等......用户只能访问其中一些类别。我想根据用户有权访问的类别过滤我的lucene.net搜索结果,或者忽略他们无法访问的项目的结果。

我尝试过使用Lucene FieldCacheTermsFilter,但这根本不会返回任何结果:

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

是否有更好的方法根据列表中存在值的特定字段过滤结果?

1 个答案:

答案 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 )

这不使用过滤器,所以我不确定这是否是性能最佳的选项。但它确实有效。