2017-05-05 3 views
1

J'ai une liste de catégories, par ex. 1000, 1001, 1002, 1003, etc ... et les utilisateurs n'ont accès qu'à certaines de ces catégories. Je souhaite filtrer mes résultats de recherche lucene.net en fonction des catégories auxquelles l'utilisateur a accès, ou omettre les résultats pour les éléments auxquels il n'a pas accès.Utilisation d'un filtre Lucene pour restreindre les éléments en fonction d'une liste

J'ai essayé d'utiliser la Lucene FieldCacheTermsFilter mais renvoie aucun résultat à tous:

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

Y at-il une meilleure façon de filtrer les résultats en fonction d'un domaine particulier ayant une valeur qui existe dans une liste?

Répondre

1

J'ai résolu cela en utilisant un wrapper BooleanQuery autour de ma requête principale dans tous les cas.

Je pris ma recherche originaly requête (MainQuery) et créé un nouveau BooleanQuery en utilisant occur.must pour cela et ma requête de sécurité comme ci-dessous:

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) 

Cela n'utilise un filtre, donc je ne suis pas sûr quant à savoir si c'est l'option la plus performante. Mais ça fonctionne.