2010-02-02 15 views
5

में multifieldquery और फ़िल्टर का उपयोग कैसे करें मैं lucene.net अनुक्रमणिका पर एक बहु फ़ील्ड खोज करना चाहता हूं लेकिन फ़ील्ड में से किसी एक के आधार पर परिणाम फ़िल्टर करना चाहता हूं। यहाँ मैं वर्तमान में क्या कर रहा है:Lucene.net

सूचकांक करने के लिए

क्षेत्रों परिभाषाएं दी गई हैं:

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

जब मैं खोज रहा निम्न कार्य करते हैं:

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

हालांकि, परिणाम हमेशा होता है 0 हिट

मैं क्या गलत कर रहा हूं?

उत्तर

6

मुझे लगता है कि अब मेरे पास समाधान है। मैंने QueryFilter के उपयोग को त्याग दिया है और MultiFieldQuery से पहले परिणामों को बाधित करने के लिए एक बूलियन क्वेरी का उपयोग कर रहा हूं। तो कोड कुछ इस तरह दिखेगा:

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

लक्ष्य पाठ खोजा जा "बॉक्स लोमड़ी", और खोज एक ग्राहक द्वारा दर्ज की गई अवधि है अगर केवल बॉक्स, तुम कैसे Lucene के लिए एक मैच को गति प्रदान करने मिलता है "बॉक्स फॉक्स" डॉक्टर? –

संबंधित मुद्दे