performance - CouchDB में पूर्ण-पाठ खोज




postgresql indexing (2)

मुझे लगता है कि बेहतर डेटा आपके डाटाबेस (पोस्टग्रेज़ या सीचडीबी) पर अपना डेटा रखता है और इसे पूर्ण टेक्स्ट खोज इंजन, जैसे ल्यूसीन , सॉलर या एललेस्टिक सर्च के साथ सूचीबद्ध करता है

यह कहने के बाद, एक परियोजना है जो ल्यूसीन के साथ सोफेडीबी को एकीकृत करता है

मुझे एक समस्या है और आपसे एक उत्तर पाने की उम्मीद है :-)

तो, मैंने geonames.org लिया और सभी जिलों के साथ जर्मन शहरों के अपने सभी डेटा आयात किए।

अगर मैं "हैम्बर्ग" में प्रवेश करता हूं, तो यह "हैम्बर्ग केंद्र, हैम्बर्ग हवाई अड्डा" और इतने पर सूचीबद्ध करता है। यह आवेदन एक बंद नेटवर्क में है जिसमें इंटरनेट तक पहुंच नहीं है, इसलिए मैं geonames.org वेब सेवाओं तक पहुंच नहीं सकता और डेटा को आयात करना होगा। :( अपने सभी जिलों के साथ शहर को एक ऑटो पूर्ण के रूप में कार्य करता है। इसलिए प्रत्येक कुंजी हिट एक XHR अनुरोध में परिणाम और इसी तरह।

अब मेरे ग्राहक ने पूछा कि क्या इसमें दुनिया का सभी डेटा होना संभव है। अंत में, 45.000.000 वैकल्पिक नाम आदि के साथ लगभग 5.000.000 पंक्तियाँ

Postgres को प्रति क्वेरी के बारे में 3 सेकंड की आवश्यकता होती है जो स्वत: पूर्ण व्यर्थ उपयोग करता है।

अब मैंने सोचा डीबीबी के बारे में सोचा है, पहले से इसके साथ काम किया है। मेरा प्रश्न:

मैं "हैम" पोस्ट करना चाहूंगा और मैं चाहता हूं कि काउचडीबी को "हैम" के साथ शुरू होने वाले सभी दस्तावेज मिलें। अगर मैं "हैम्बर्ग" में प्रवेश करता हूं तो मैं चाहता हूं कि वह हैम्बर्ग वापस लौटा ले।

क्या इसके लिए सीचडीबी सही डाटाबेस है? कौन सी अन्य डीबी आप अनुशंसा कर सकते हैं कि कम विलंबता (इन-मेमोरी) और लाखों डेटासेट के साथ प्रतिक्रिया हो सकती है? डाटासेट नियमित रूप से नहीं बदलता है, इसकी स्थिर स्थिति!


अगर मैं आपकी समस्या को सही समझता हूं, तो शायद आपको पहले से ही काउचडीबी में बनाया गया है।

  1. जैसे "हैम" से शुरू होने वाले नामों के साथ कई दस्तावेज प्राप्त करने के लिए आप स्ट्रिंग श्रेणी के साथ एक अनुरोध का उपयोग कर सकते हैं: startkey="Ham"&endkey="Ham\ufff0"
  2. यदि आपको अधिक व्यापक खोज की आवश्यकता है, तो आप कुंजी के रूप में अन्य स्थानों के नाम वाले दृश्य बना सकते हैं। तो फिर आप फिर से तकनीक का उपयोग कर श्रेणियों से पूछ सकते हैं।

इसे बनाने के लिए एक दृश्य फ़ंक्शन है:

function(doc) {
    for (var name in doc.places) {
        emit(name, doc._id);
    }
}

CouchDB टाइपआहेड और स्वत: पूर्ण खोज के बारे में CouchOne ब्लॉग पोस्ट और CouchDB स्वत: पूर्ण होने के बारे में मेलिंग सूची पर यह चर्चा भी देखें।





couchdb