2010-09-15 34 views
5

में समान स्थिति मैं CouchDB में एक LIKE-condition (SQL वाक्यविन्यास) करना चाहता हूं। यह कैसे किया जा सकता है? LIKE-condition ब्राउज़र में ऑटो पूर्ण करने के लिए उपयोग किया जाएगा।CouchDB

मैं इनपुट क्षेत्र में "सह" लिखना चाहता हूं और परिणाम कॉफी, सोफे, कॉच डीबी ect प्राप्त करना चाहता हूं।

उत्तर

9

स्ट्रिंग की शुरुआत में अक्षरों की खोज करना बहुत आसान है। आपको केवल उस दृश्य की आवश्यकता है जो उस स्ट्रिंग को उत्सर्जित करता है जिसे आप कुंजी के रूप में खोजना चाहते हैं। मान लें कि उपयोगकर्ता इनपुट एक चर q में संग्रहीत है, फिर आप उस दृश्य को पैरामीटर startkey=q और endkey=q+"\ufff0" के साथ कॉल करते हैं।

यहां की चाल खोज स्ट्रिंग में उच्चतम संभव यूनिकोड चरित्र को जोड़ना है। सॉर्ट ऑर्डर में, यह स्ट्रिंग q से शुरू होने वाली किसी भी चीज़ के बाद आता है। (@titanoboa द्वारा सुझाए गए समाधान की तुलना में इसे कार्यान्वित करना बहुत आसान है, जहां आपको उपयोगकर्ता इनपुट के अंतिम अक्षर को "वृद्धि" करने की आवश्यकता है।)

यदि आप भी एक के बीच में शब्दों को ढूंढने में सक्षम होना चाहते हैं

function(doc) { 
    if (doc.title) { 
    var words = {}; 
    doc.title.replace(/\w+/g, function(word) { 
     words[word.toLowerCase()] = true; 
    }); 
    for (w in words) { 
     emit(w, doc); 
    } 
    } 
} 

बेशक इस छोटे से तार के लिए ही सलाह दी जाती है: स्ट्रिंग (उदाहरण के लिए "कोलबर्ट रिपोर्ट" जब "सह" टाइप), तो आप इस तरह एक दृश्य का उपयोग कर सकते हैं। लंबे ग्रंथों में खोज के लिए आपको couchdb-lucene जैसे पूर्ण-पाठ खोज ऐड-ऑन में देखना चाहिए।

+0

उच्चतम संभव यूनिकोड वर्ण 'fff0' और 'ffff' क्यों नहीं है? – Jez

+0

@ जेज़ यह एक अच्छा सवाल है, मुझे नहीं पता कि मैंने फिर से \ \ufff0' क्यों लिखा था। मुझे लगता है कि सही कोड बिंदु '\ u {10FFFF}' होगा, लेकिन मैंने इसका परीक्षण नहीं किया है। (Https://en.wikipedia.org/wiki/UTF-8#Description) –

0

वह अकेले कॉच डीबी के साथ काम नहीं करेगा। कोशिश करने की सबसे अच्छी बात लुसीन सर्च इंजन है जो कॉच डीबी के साथ अच्छी तरह से काम करती है। ल्यूसीन को पूर्ण-पाठ खोज के लिए डिज़ाइन किया गया है जो मूल रूप से आप जो खोज रहे हैं। Here संयोजन पर कुछ निर्देश हैं।

0

अपना उदाहरण लागू करने के लिए, आप एक ऐसा दृश्य बना सकते हैं जिसमें आपका क्षेत्र एक कुंजी और एक ही फ़ील्ड, संपूर्ण दस्तावेज़ या जो भी आप मूल्य के रूप में चाहते हैं। यदि आप startkey="co", endkey="cp", inclusive_end=false पैरामीटर के साथ दृश्य पूछते हैं, तो आपको "सह" से शुरू होने वाली कुंजी के साथ सभी प्रविष्टियां मिलेंगी।

बेशक, यह 'पसंद' से कम शक्तिशाली है।