使用Lucene过滤器来限制基于列表的项目
问题描述:
我有一个类别列表,例如, 1000,1001,1002,1003等等,用户只能访问其中的一些类别。我想仅根据用户有权访问的类别过滤我的lucene.net搜索结果,或者省略他们无权访问的项目的结果。使用Lucene过滤器来限制基于列表的项目
我已经使用了Lucene FieldCacheTermsFilter尝试,但这种不返回任何结果都:
New Lucene.net.search.FieldCacheTermsFilter("category", {"1000", "1002"})
有没有更好的方法基于具有存在于一个列表中的值的特定字段筛选结果?
答
我解决了这个问题,通过在所有情况下在我的主要查询周围使用布尔查询包装器。
我把我的渊源搜索查询(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)
这不使用过滤器,所以我不确定至于这是否是表现最佳的选择。但它的工作。