2012-08-06 13 views
7

में कई रिश्तों के लिए कई मुझे पता है कि लोचदार खोज में, हमारे पास दस्तावेजों के बीच child/parent relationships हो सकता है।elasticsearch

और तब, जब का अनुक्रमण, मैं पैरेंट आईडी ताकि बच्चे और माता पिता के दस्तावेजों से जुड़े हुए हैं पारित कर सकते हैं:

$ curl -XPUT localhost:9200/blogs/blog_tag/1122?parent=1111 -d '{ "tag" : "something"}' 

वहाँ वैसे भी elasticsearch में कई रिश्ते के लिए कई मॉडल करने के लिए है?

डाटा है निम्न स्कीमा के साथ एक MySQL डेटाबेस में रहता है:

account 
======== 
id 
name 
some_property 

group 
======== 
id 
name 
description 

account_group 
============= 
account_id 
group_id 
primary_group //This is 1 or 0 depending on whether the group is the primary group for that account. 

यह वह जगह है वर्तमान में account के लिए मेरे मानचित्रण (कृपया सरणी संकेतन बहाना, मैं PHP में Elastica उपयोग कर रहा हूँ मेरी elasticsearch सर्वर से बात करने के लिए) :

**Mapping for account** 

'name' => array(
    'type' => 'string'), 

'some_property' => array(
    'type' => 'string'), 

'groups' => array(
    'properties' => array(
    'id'  => array('type' => 'integer'), 
    'primary' => array('type' => 'boolean') 
    ) 
), 

**Mapping for group** 

'name' => array(
     'type' => 'string'), 

'description'=> array(
     'type' => 'string') 

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

क्या लोचदार खोज में कई से अधिक रिश्तों को मॉडल करने के लिए वैसे भी है?

उत्तर

10

कई से अधिक रिश्तों को मॉडल करने का कोई तरीका नहीं है।

एकमात्र तरीका प्रत्येक खाते में प्रत्येक समूह की आईडी को स्टोर करना है जैसा मैंने ऊपर किया है।

लोचदार खोज बहुत कुशल है, अक्सर बार, रीइंडेक्सिंग एक स्वीकार्य समाधान है। इसके अलावा, लोचदार खोज में दस्तावेजों की धारणा है और यह एक रिलेशनल स्टोरेज सिस्टम नहीं है, इसलिए कई सारे रिश्तों को शायद कभी लागू नहीं किया जाएगा।

0

जब आप दक्षता के बारे में सोचते हैं, तो आपको क्या लिखने की आवश्यकता है लेखन समय बनाम रीड-टाइम दक्षता है। रिलेशनल डेटाबेस लेखन-समय दक्षता का पक्ष लेते हैं, जबकि नोएसक्यूएल रीड-टाइम दक्षता का समर्थन करता है।

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