2011-04-27 5 views
68

मैं अपाचे सोलर के लिए नया हूं। documentation भाग पढ़ने के बाद भी, मुझे multiValued फ़ील्ड प्रकार की संपत्ति की कार्यक्षमता और उपयोग को स्पष्ट रूप से समझना मुश्किल लगता है।सोलर में "बहुवृत्त" फ़ील्ड प्रकार का उपयोग क्या है?

आंतरिक रूप से सोलर बहुवृद्धि के रूप में चिह्नित फ़ील्ड को आंतरिक रूप से करता/संभालता/नियंत्रित करता है?

मल्टीवाल्डेड और जो नहीं हैं, के बीच सोलर में अनुक्रमण में अंतर क्या है?

क्या कोई कुछ अच्छे उदाहरण के साथ समझा सकता है?

डॉक्टर का कहना है:

बहु-मूल्यांकित = सच | झूठी

यह सच है कि अगर यह क्षेत्र दस्तावेज़, यानी प्रति एक से अधिक मान हो सकती है यह एक दस्तावेज़ में कई बार दिखाई दे सकता है अगर

उत्तर

68

क्षेत्र के लिए एक से अधिक मूल्य मौजूद होने पर एक बहुविकल्पीय क्षेत्र उपयोगी होता है। एक आसान उदाहरण टैग होगा, कई टैग हो सकते हैं जिन्हें अनुक्रमित करने की आवश्यकता है। इसलिए यदि हमारे पास टैग फ़ील्ड को गुणात्मक प्रतिक्रिया के रूप में मिला है तो स्ट्रिंग मान की बजाय सूची लौटा दी जाएगी। एक बात ध्यान रखें कि आप की तरह टैग के प्रत्येक मान के लिए कई पंक्तियों प्रस्तुत करने की आवश्यकता है:

 
<field name="tags">tag1</tags> 
<field name="tags">tag2</tags> 
... 
<field name="tags">tagn</tags> 

एक बार आप सभी मूल्यों सूचकांक आप किसी भी मूल्य, ई, जी द्वारा खोज या फिल्टर परिणाम कर सकते हैं।आप की तरह

q=tags:tag1 

क्वेरी का उपयोग tag1 साथ सभी दस्तावेजों को खोजने या

q=query&fq=tags:tag1 
+5

'किसी भी मूल्य से खोज या फ़िल्टर परिणाम' करने के बीच क्या अंतर/लाभ है? इस मामले में, * टैग्स: टैग 1 * में 'q' या 'fq' में खोज करने में क्या अंतर होता है? – Gnanam

+1

प्रत्येक का मान एक स्ट्रिंग हो सकता है और आप सटीक तार का एक सेट के खिलाफ मिलान कर सकते हैं। एकल मूल्यवान फ़ील्ड के मामले में आप या तो टोकनयुक्त शब्द या संपूर्ण स्ट्रिंग कर सकते हैं। एक अन्य प्रयोग मानों सूची के रूप में मैं टैग के मामले में उल्लेख कर रहे हैं स्टोर करने के लिए है, संख्यात्मक मूल्य की एक सूची की तरह नंबर हो सकता है। – Umar

+6

@Gnanam: छानने प्रश्नों कैश नहीं किया जाता और स्कोर को प्रभावित नहीं करते। उनका मुख्य उद्देश्य दस्तावेज़ों का एक निश्चित "सुपरसेट" बनाना है, जिसे फिर खोजा जा सकता है। उदाहरण: उपयोगकर्ता क्वेरी प्रविष्ट करता है और आवेदन केवल दस्तावेजों उपयोगकर्ता के स्वामित्व वाली खोज करने के लिए उदाहरण के लिए अतिरिक्त बाधाओं लागू होती है। इस मामले में एप्लिकेशन "केवल दिए गए उपयोगकर्ता" को 'fq' और वास्तविक खोज क्वेरी' q' के रूप में बाध्यता भेजेगा। –

14

स्कीमा में परिभाषित बहुवर्तित है कि फ़ील्ड को एक से अधिक मान होने की अनुमति है या नहीं।

उदाहरण के लिए:

doc { 
    id : [ 1, 2] 
    ... 
} 

एक अपवाद अनुक्रमण धागा में फेंक दिया जा करने के लिए कारण होगा और दस्तावेज़ होगा:
अगर मैं एक fieldType बुलाया आईडी जो बहु-मूल्यांकित = इस जैसे झूठे अनुक्रमण एक दस्तावेज है अनुक्रमित नहीं किया गया (स्कीमा सत्यापन विफल हो जाएगा)।

दूसरी ओर अगर मैं एक क्षेत्र के लिए अनेक मान है पर मैं सही ढंग से किया जाता है, उदाहरण के लिए बहु-मूल्यांकित = आदेश है कि अनुक्रमण की गारंटी के लिए सही सेट करना चाहते हैं:

doc { 
    id : 1 
    keywords: [ hello, world ] 
    ... 
} 

इस मामले में क्या तुम करोगी एक बहुवृत्त क्षेत्र के रूप में "कीवर्ड" को परिभाषित करें।

+1

मुझे पता है मैं सही ढंग से इस समझ लिया है या नहीं। उदाहरण के लिए, यदि मैं 'DataImportHandler' का उपयोग कर डेटाबेस से सीधे डेटा इंडेक्स करने का प्रयास करता हूं और यदि मेरे डेटाबेस फ़ील्ड * टैग * प्रकार में से एक 'VARCHAR []' (वर्कर सरणी) है, तो यह * टैग * फ़ील्ड को मैप करने के लिए समझ में आता है सौर स्कीमा क्षेत्र में बहुवर्तित के रूप में। क्या मैं अपनी समझ में सही हूं? – Gnanam

+1

यहां खेल के लिए देर हो चुकी है, लेकिन मैं आम तौर पर हाँ कहूंगा ... लेकिन कभी भी कभी नहीं कहें और हमेशा कभी नहीं कहें – markg

12

मैं केवल copyfields के साथ कई मान फ़ील्ड का उपयोग करें, तो इस तरह से लगता है जैसे परिणाम को फ़िल्टर करने के टैग का उपयोग कर सकते हैं, सभी क्षेत्रों का कहना है एकल मूल्यवान होगा, बशर्ते वह एक copyfield है, उदाहरण के लिए मैं निम्नलिखित क्षेत्रों है:

<field name="id" type="string" indexed="true" stored="true"/> 
<field name="name" type="string" indexed="true" stored="true"/> 
<field name="subject" type="string" indexed="true" stored="true"/> 
<field name="location" type="string" indexed="true" stored="true"/> 

मैं ऊपर सभी 4 क्षेत्रों खोज करने के लिए केवल और संभवतः एक क्षेत्र क्वेरी करना चाहते हैं, तो हम यू की जरूरत है से कॉपीफील्ड। एक नए क्षेत्र कॉल 'सभी' बनाने के लिए पहला, फिर 'सभी'

<field name="all" type="text" indexed="true" stored="true" multiValued="true"/> 
<copyField source="*" dest="all"/> 

अब क्षेत्र 'सभी' में सब कुछ कॉपी बहु-मान की जरूरत है।

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