2009-08-20 10 views
7

Jak mogę zrobić filtr w wielu polach w Lucene.Net? Na jednym polu po prostu:lucene.net łączą wiele filtrów i nie zawierają wyszukiwanych haseł.

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

Jeśli teraz chcę dodać długość paznokcia do filtra, jak mogę to zrobić?

Ponadto, chcę, aby użytkownik był w stanie wykonać wyszukiwanie bez wyszukiwanego terminu (tj. Po prostu wybierając kategorię), w jaki sposób mogę to zrobić?

Odpowiedz

12

Chyba pytasz dwa pytania ...

Pytanie 1: dodanie dodatkowego filtra

Pamiętaj, QueryFilter akceptuje dowolny zapytania (nie tylko TermQuery). W związku z tym można utworzyć BooleanQuery kryteriów, które mają być filtrowane.

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

Pytanie 2: Searching bez szukanej

Jeśli użytkownik nie przewiduje termin wyszukiwania, można wyszukiwać za pomocą MatchAllDocsQuery zapytania.