2017-05-05 11 views
1

私はカテゴリのリストを持っています。 1000,1001,1002,1003など、ユーザーはこれらのカテゴリの一部にのみアクセスできます。ユーザーがアクセスできるカテゴリのみに基づいてlucene.netの検索結果をフィルタリングしたり、アクセス権のないアイテムの検索結果を省略したりします。Luceneフィルタを使用してリストに基づいてアイテムを制限する

私はLuceneのFieldCacheTermsFilterを使用して試してみましたが、これはすべての結果を返しません:

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

は、リストに存在する値を有する特定のフィールドに基づいて結果をフィルタリングするためのより良い方法はありますか?

答えて

1

すべてのケースでメインクエリの回りに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) 

これは、フィルターを使用していないので、私はわかりませんよこれが最高のパフォーマンスを発揮するオプションかどうかを判断します。しかし、それは動作します。

関連する問題