2009-08-20 2 views
7

Wie kann ich einen Filter über mehrere Felder in Lucene.Net tun? Auf einem Feld tue ich einfach:lucene.net kombinieren mehrere Filter und keine Suchbegriffe

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

Wenn ich nun dem Filter eine Nagellänge hinzufügen wollte, wie kann ich das machen?

Auch möchte ich den Benutzer ein der Lage sein, eine Suche ohne Suchbegriff zu tun (das heißt durch nur eine Kategorie wählen), wie kann ich das tun?

Antwort

12

Ich glaube, Sie zwei Fragen ...

Frage 1: Hinzufügen einer zusätzlichen Filter

Denken Sie daran, QueryFilter akzeptiert jede Abfrage (nicht nur TermQuery). Sie können daher eine der Kriterien erstellen, nach denen Sie filtern möchten.

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); 

Frage 2: Suche ohne einen Suchbegriff

Wenn der Benutzer kein Suchwort bereitstellt, können Sie mit einer MatchAllDocsQuery Abfrage suchen.