2010-02-02 12 views
5

lucene.net dizininde çok alanlı bir arama yapmak, ancak alanlardan birine göre sonuçları filtrelemek istiyorum. İşte şu anda yapıyorum: endeksi içinLucene.net'te multifieldquery ve filtreler nasıl kullanılır?

alanları tanımları şöyledir: Ben aşağıdakileri yapın arama gerçekleştirdiğinizde

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

: Ancak

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

, sonuç her zaman 0 isabet.

Neyi yanlış yapıyorum?

cevap

6

Şimdi bir çözüm buldum. QueryFilter kullanımını göz ardı ettik ve sonuçları MultiFieldQuery önce sınırlamak için bir boolean sorgusu kullanıyorum. Yani kodu şöyle görünecektir:

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

Aranan hedef metin "kutu tilki" ve istemci tarafından girilen arama terimi edilir ise tek kutu, nasıl lucene için bir eşleşme tetiklemek için alırım "kutu tilki" doktoru? –

İlgili konular