2013-11-25 8 views
8

मेरे पास एकाधिक फ़ील्ड वाले इंडेक्स हैं, जिनमें से एक एक स्ट्रिंग फ़ील्ड है जिसमें मैं उत्पाद के लिए श्रेणी नाम स्टोर करता हूं ... जैसे "इलेक्ट्रॉनिक्स", "होम", "गार्डन", आदिलुसेन या बूलियन क्वेरी का उपयोग करके खोज

new StringField("category_name", categoryName, Field.Store.YES)); //categoryName is a value such as "Electronics" 

मैं एक बूलियन पूछताछ कर रहा हूँ नाम, मूल्य, और श्रेणी के आधार पर उत्पादों को खोजने के, लेकिन मैं इतना है कि मैं एक ही समय में दो श्रेणियों के लिए क्वेरी कर सकते हैं एक या खोज करने के लिए कैसे यकीन नहीं है।

मेरे वर्तमान क्वेरी इस तरह दिखता है:

String cat = "Electronics" 
TermQuery catQuery = new TermQuery(new Term("category_name", cat)); 
bq.add(new BooleanClause(catQuery, BooleanClause.Occur.MUST)); // where "bq" is the boolean query I am adding to, I tried .SHOULD but that didn't help either 

यह एक श्रेणी खोज के लिए ठीक काम करता है, लेकिन मैं खोज करने के लिए कैसे "इलेक्ट्रॉनिक्स या घर" जो दो श्रेणियों होगा यकीन नहीं है।

+2

@ Ibear के जवाब सही है, लेकिन आप भी पढ़ सकते हैं http://searchhub.org/dev/2011/12/28/why-not-and-or -और नहीं/बेहतर समझने के लिए कि ल्यूसीन में बूलियन तर्क कैसे काम करता है। – mindas

+0

@ मिंडस, लिंक के लिए धन्यवाद, जो वास्तव में बहुत मदद करता है। इच्छा है कि मैं इसे एक उत्तर के रूप में वोट दे सकता हूं क्योंकि यह वास्तव में उपयोगी है। – SoluableNonagon

उत्तर

22

आप की तरह लिख सकते हैं:

BooleanQuery categoryQuery = new BooleanQuery(); 
TermQuery catQuery1 = new TermQuery(new Term("category_name", "Electronics")); 
TermQuery catQuery2 = new TermQuery(new Term("category_name", "Home")); 
categoryQuery.add(new BooleanClause(catQuery1, BooleanClause.Occur.SHOULD)); 
categoryQuery.add(new BooleanClause(catQuery2, BooleanClause.Occur.SHOULD)); 
bq.add(new BooleanClause(categoryQuery, BooleanClause.Occur.MUST)); 
+2

मेरी इच्छा है कि मैं यह एकाधिक अप-वोट दे सकता हूं। यह एक आकर्षण की तरह काम करता है। – SoluableNonagon

+0

* बिल्कुल * मुझे क्या चाहिए और दस्तावेज़ों में नहीं मिला। –

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