2008-12-16 10 views
5

में मल्टीफ़िल्ड खोज मुझे ल्यूसीन का उपयोग करके पुस्तक डेटाबेस पर बहु-क्षेत्रीय स्तर की खोज करने की आवश्यकता है।लुसीन

उदाहरण के लिए

: मेरे खोज मापदंड की तरह कुछ है:

(Author:a1 and title:t1) OR (Author:a2 and title:t2) OR (Author:a3 and title:t3) 

जहां a1, t1 आदि लेखकों के नाम और पुस्तक शीर्षक क्रमशः रहे हैं। मैं इस तरह के मानदंडों के लिए अपनी ल्यूसीन क्वेरी ऑब्जेक्ट कैसे प्राप्त करूं?

धन्यवाद!

उत्तर

11

निम्नलिखित कोड ए 1, ए 2, ए 3, टी 1, टी 2, टी 3 मानते हैं। यदि वे वाक्यांश हैं, तो आपको TermQuery के बजाय PhraseQuery का उपयोग करने की आवश्यकता होगी।

// Create a BooleanQuery for (Author:a1 and title:t1) 

BooleanQuery a1AndT1 = new BooleanQuery(); 
a1AndT1.add(new TermQuery(new Term("Author", "a1")), BooleanClause.Occur.MUST); 
a1AndT1.add(new TermQuery(new Term("title", "t1")), BooleanClause.Occur.MUST); 

// Create a BooleanQuery for (Author:a2 and title:t2) 

BooleanQuery a2AndT2 = new BooleanQuery(); 
a2AndT2.add(new TermQuery(new Term("Author", "a2")), BooleanClause.Occur.MUST); 
a2AndT2.add(new TermQuery(new Term("title", "t2")), BooleanClause.Occur.MUST); 

// Create a BooleanQuery for (Author:a3 and title:t3) 

BooleanQuery a3AndT3 = new BooleanQuery(); 
a3AndT3.add(new TermQuery(new Term("Author", "a3")), BooleanClause.Occur.MUST); 
a3AndT3.add(new TermQuery(new Term("title", "t3")), BooleanClause.Occur.MUST); 

// Create a BooleanQuery that combines the OR-clauses 

BooleanQuery query = new BooleanQuery(); 
query.add(a1AndT1, BooleanClause.Occur.SHOULD); 
query.add(a2AndT2, BooleanClause.Occur.SHOULD); 
query.add(a3AndT3, BooleanClause.Occur.SHOULD); 

// As you can see, the resulting Lucene query is 
// (+Author:a1 +title:t1) (+Author:a2 +title:t2) (+Author:a3 +title:t3) 
// which behaves the same as something like 
// (Author:a1 and title:t1) OR (Author:a2 and title:t2) OR (Author:a3 and title:t3) 

System.out.println(query); 
संबंधित मुद्दे