【问题标题】:Using a Lucene Filter to restrict items based on a list使用 Lucene 过滤器根据列表限制项目
【发布时间】:2017-05-05 09:56:16
【问题描述】:

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

我尝试过使用 Lucene FieldCacheTermsFilter 但这根本没有返回任何结果:

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

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

【问题讨论】:

    标签: search lucene lucene.net


    【解决方案1】:

    在所有情况下,我通过在主查询周围使用 BooleanQuery 包装器解决了这个问题。

    我使用了我原来的搜索查询 (MainQuery) 并创建了一个新的 BooleanQuery 使用发生.must 和我的安全查询如下:

    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 )
    

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

    【讨论】:

      猜你喜欢
      • 2015-05-09
      • 2017-02-11
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      相关资源
      最近更新 更多