2009-08-20 8 views
7

Comment faire un filtre sur plusieurs champs dans Lucene.Net? Sur un champ je fais simplement:lucene.net combine plusieurs filtres et aucun terme de recherche

TermQuery tool = new TermQuery(new Term("Tool", "Nail")); 
Filter f = new QueryFilter(tool); 

Si je voulais maintenant ajouter une longueur de clou au filtre, comment puis-je faire cela?

En outre, je souhaite que l'utilisateur soit capable de faire une recherche sans terme de recherche (c'est-à-dire en choisissant simplement une catégorie) comment puis-je faire cela?

Répondre

12

Je pense que vous vous posez deux questions ...

Question 1: Ajout d'un filtre supplémentaire

Rappelez-vous, QueryFilter accepte toute requête (pas seulement TermQuery). Donc, vous pouvez créer un BooleanQuery des critères que vous souhaitez filtrer.

TermQuery toolQuery = new TermQuery(new Term("Tool", "Nail")); 
TermQuery nailLengthQuery = new TermQuery(new Term("NailLength", "3 inches")); 

BooleanQuery filterQuery = new BooleanQuery(); 
filterQuery.add(toolQuery, BooleanClause.Occur.MUST); 
filterQuery.add(nailLengthQuery, BooleanClause.Occur.MUST); 

Filter f = new QueryFilter(filterQuery); 

Question 2: Recherche sans un terme de recherche

Si l'utilisateur fournit pas de terme de recherche, vous pouvez effectuer une recherche à l'aide d'une requête MatchAllDocsQuery.

Questions connexes