2011-04-07 12 views
20

क्या यह किसी ऐसे दस्तावेज़ को बनाना संभव है जिसमें उप-तत्व शामिल हैं?बाल तत्वों के साथ सौर दस्तावेज़?

<person first="Bob" last="Smith"> 
    <children> 
     <child first="Little" last="Smith" /> 
     <child first="Junior" last="Smith" /> 
    </children> 
</person> 

इस समस्या को हल करने के लिए हमेशा की तरह क्या है:

उदाहरण के लिए, मैं कुछ इस तरह कैसे प्रतिनिधित्व करेंगे?

उत्तर

13

आप अपनी खोज/पहल की जरूरतों के आधार पर इसे विभिन्न तरीकों से मॉडल कर सकते हैं। आमतौर पर आप बहुविकल्पीय या गतिशील क्षेत्रों का उपयोग करेंगे।

<field name="first"/> 
<field name="last"/> 
<field name="child_first" multiValued="true"/> 
<field name="child_last" multiValued="true"/> 

यह बच्चों पहला नाम और अंतिम नाम सहसंबंधी आप पर निर्भर है: अगले उदाहरण में मैं फ़ील्ड प्रकार, अनुक्रमित और संग्रहीत झंडे छोड़ देंगे। या आप बस एक ही क्षेत्र में दोनों डाल सकता है:

<field name="first"/> 
<field name="last"/> 
<field name="child_first_and_last" multiValued="true"/> 

एक और एक:

<field name="first"/> 
<field name="last"/> 
<dynamicField name="child_first_*"/> 
<dynamicField name="child_last_*"/> 

यहाँ आप फ़ील्ड 'child_first_1', 'child_last_1', 'child_first_2', 'child_last_2', आदि संग्रहीत करेंगे फिर से यह मूल्यों से संबंधित है, लेकिन कम से कम आपके पास एक अनुक्रमणिका है। कुछ कोड के साथ आप यह पारदर्शी बना सकते हैं।

नीचे पंक्ति: Solr wiki कहता है: "सोलर एक टेबल प्रदान करता है। एक इंडेक्स में सेट डेटाबेस टेबल को संग्रहीत करने के लिए आम तौर पर कुछ तालिकाओं को denormalizing की आवश्यकता होती है। आमतौर पर denormalizing से बचने के प्रयास विफल।" आपकी खोज आवश्यकताओं के अनुसार आपके डेटा को denormalize करने के लिए यह आप पर निर्भर है।

अद्यतन: संस्करण 4.5 के बाद से या तो Solr नेस्टेड दस्तावेजों सीधे समर्थन करता है: https://cwiki.apache.org/confluence/display/solr/Other+Parsers#OtherParsers-BlockJoinQueryParsers

+0

धन्यवाद मॉरिसियो। विकल्प # 1 और # 2 वास्तव में उपयोगी नहीं हैं क्योंकि यह अलग-अलग फ़ील्ड निकालने के लिए असंभव हो जाता है, खासकर अगर दो से अधिक हो। आपका तीसरा सुझाव गतिशील क्षेत्रों का उपयोग करके बस काम कर सकता है। मैं इन गतिशील क्षेत्रों को उत्पन्न करने के लिए DataImportHandler में किस तंत्र का उपयोग करूंगा? – cambo

+0

@ user332523: यदि आप DataImportHandler का उपयोग करने के लिए प्रतिबंधित हैं तो यह असंभव हो सकता है ... लेकिन यदि आप अपनी कोड की प्रक्रिया में आयात करते हैं तो यह करना बहुत आसान है। –

+0

हाय मॉरिसियो, उत्तर के लिए धन्यवाद। क्या आपका मतलब सिर्फ एक कस्टम डेटा आयातक है जो सूचकांक में दस्तावेज़ जोड़ने के लिए सोलर एपीआई का उपयोग करता है? मैंने सोलर डीआईएच डॉक्स में कुछ के बारे में पढ़ा है जो गतिशील फ़ील्ड बनाने में सक्षम हो सकता है [http://wiki.apache.org/solr/DataImportHandler#TemplateTransformer] – cambo

7

बच्चों के लिए एक अलग क्षेत्र के बाद गलत सकारात्मक मिलानों की ओर जाता है। समेकित क्षेत्र कुछ अर्थों में काम करते हैं लेकिन यह वास्तव में सीमित दृष्टिकोण है। हम इसी तरह के कार्यों में बहुत अनुभव http://blog.griddynamics.com/2011/06/solr-experience-search-parent-child.html

+3

वाह। मैंने लगभग दो साल पहले इसका उत्तर दिया था। अब मैंने अपना दिमाग बदल दिया। No.1 मशीनरी का वर्णन http://blog.mikemccandless.com/2012/01/searching-relational-content-with.html पर किया गया है, यह अभी Solr https://issues.apache.org/jira/browse/ के लिए उपलब्ध कराया गया है एसओएलआर -3076 4.5 पर जारी किया जाएगा। और btw यह वास्तव में लंबे समय के लिए #ElasticSearch द्वारा समर्थित है – mkhludnev

19

पर ब्लॉग Solr 4.7 और 4.8 के रूप में है, Solr नेस्टेड दस्तावेजों का समर्थन करता है:

{ 
"id": "chapter1", 
"title" : "Indexing Child Documents in JSON", 
"content_type": "chapter", 
"_childDocuments_": [ 
    { 
    "id": "1-1", 
    "content_type": "page", 
    "text": "ho hum... this is page 1 of chapter 1" 
    }, 
    { 
    "id": "1-2", 
    "content_type": "page", 
    "text": "more text... this is page 2 of chapter 1" 
    } 
] 
} 

अधिक के लिए Solr release notes देखें।

+1

लिंक टूटा हुआ है। क्या आप इसे अपडेट कर सकते हैं? – elachell

+0

इस संरचना का उपयोग घास के साथ कैसे करें? –

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