2017-05-05 1 views
1

나는 범주 목록을 가지고 있습니다. 1000, 1001, 1002, 1003 등 ... 및 사용자는이 카테고리 중 일부에만 액세스 할 수 있습니다. 사용자가 액세스 할 수있는 범주만을 기반으로 lucene.net 검색 결과를 필터링하거나 액세스 권한이없는 항목의 결과를 생략하려고합니다.Lucene 필터를 사용하여 목록을 기반으로 항목을 제한합니다.

나는 루씬 FieldCacheTermsFilter를 사용하여 시도했지만이 전혀 결과를 반환 :

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

목록에 존재하는 값을 갖는 특정 필드를 기준으로 결과를 필터링 할 수있는 더 나은 방법이 있나요를?

답변

1

모든 경우에 내 기본 쿼리를 둘러싼 BooleanQuery 래퍼를 사용하여이 문제를 해결했습니다.

내 originaly 검색 쿼리 (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) 

이 필터를 사용하지 않는, 그래서 나는 확실하지 오전 이것이 최선의 실행 옵션인지 여부 그러나 그것은 효과적이다.

관련 문제