2010-02-02 3 views
5

Ich möchte eine Multi-Field-Suche auf einem lucene.net-Index durchführen, aber die Ergebnisse basierend auf einem der Felder filtern. Hier ist, was ich momentan mache:Wie verwendet man multifieldquery und Filter in Lucene.net

So indizieren die Felder die Definitionen sind:

doc.Add(new Field("id", id.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED)); 
doc.Add(new Field("title", title, Field.Store.NO, Field.Index.TOKENIZED)); 
doc.Add(new Field("summary", summary, Field.Store.NO, Field.Index.TOKENIZED, Field.TermVector.YES)); 
doc.Add(new Field("description", description, Field.Store.NO, Field.Index.TOKENIZED, Field.TermVector.YES)); 
doc.Add(new Field("distribution", distribution, Field.Store.NO, Field.Index.UN_TOKENIZED)); 

Wenn ich die Suche durchführen ich folgendes tun:

MultiFieldQueryParser parser = new MultiFieldQueryParser(new string[]{"title", "summary", "description"}, analyzer); 
parser.SetDefaultOperator(QueryParser.Operator.AND); 
Query query = parser.Parse(text); 

BooleanQuery bq = new BooleanQuery(); 
TermQuery tq = new TermQuery(new Term("distribution", distribution)); 
bq.Add(tq, BooleanClause.Occur.MUST); 
Filter filter = new QueryFilter(bq); 

Hits hits = searcher.Search(query, filter); 

Allerdings ist das Ergebnis immer 0 Treffer

Was mache ich falsch?

Antwort

6

Ich denke, ich habe jetzt eine Lösung. Ich habe die Verwendung von QueryFilter verworfen und verwende eine boolesche Abfrage, um die Ergebnisse vor der MultiFieldQuery einzuschränken. So wird der Code wie folgt aussehen:

MultiFieldQueryParser parser = new MultiFieldQueryParser(new string[]{"title", "summary", "description"}, analyzer); 
parser.SetDefaultOperator(QueryParser.Operator.AND); 
Query query = parser.Parse(text); 

BooleanQuery bq = new BooleanQuery(); 
TermQuery tq = new TermQuery(new Term("distribution", distribution)); 
bq.Add(tq, BooleanClause.Occur.MUST); 
bq.Add(query, BooleanClause.Occur.MUST) 

Hits hits = searcher.Search(bq); 
+0

Wenn der Zieltext gesucht wird, ist „ein Fuchs“, und der Suchbegriff von einem Client eingegeben wird nur Box, wie bekommt man lucene ein Spiel für die triggern "Box Fuchs" Doc? –