使用 Lucene 过滤器基于列表限制项目
Using a Lucene Filter to restrict items based on a list
我有一个类别列表,例如1000、1001、1002、1003 等...并且用户只能访问其中一些类别。我想仅根据用户有权访问的类别过滤我的 lucene.net 搜索结果,或者忽略他们无权访问的项目的结果。
我已经尝试使用 Lucene FieldCacheTermsFilter,但是 returns 根本没有结果:
New Lucene.net.search.FieldCacheTermsFilter("category", {"1000", "1002"} )
是否有更好的方法来根据具有列表中存在的值的特定字段来过滤结果?
我通过在所有情况下围绕我的主查询使用 BooleanQuery 包装器解决了这个问题。
我采用了我的原始搜索查询 (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 )
这没有使用过滤器,所以我不确定这是否是性能最佳的选项。但它有效。
我有一个类别列表,例如1000、1001、1002、1003 等...并且用户只能访问其中一些类别。我想仅根据用户有权访问的类别过滤我的 lucene.net 搜索结果,或者忽略他们无权访问的项目的结果。
我已经尝试使用 Lucene FieldCacheTermsFilter,但是 returns 根本没有结果:
New Lucene.net.search.FieldCacheTermsFilter("category", {"1000", "1002"} )
是否有更好的方法来根据具有列表中存在的值的特定字段来过滤结果?
我通过在所有情况下围绕我的主查询使用 BooleanQuery 包装器解决了这个问题。
我采用了我的原始搜索查询 (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 )
这没有使用过滤器,所以我不确定这是否是性能最佳的选项。但它有效。