2015-01-16 7 views
13

मैं अपने रेसिपी-वेबसाइट के लिए एक खोज इंजन को लागू करने की कोशिश कर रहा हूं, जिसमें मोंगो डीबी का उपयोग किया गया है। मैं उपयोगकर्ताओं को टाइप-अग्रेषित विजेट बॉक्स में खोज सुझाव प्रदर्शित करने का प्रयास कर रहा हूं।mongodb अनुमानित स्ट्रिंग मिलान

मैं भी गलत वर्तनी प्रश्नों (लेवेनशेटिन दूरी) का समर्थन करने की कोशिश कर रहा हूं।

उदाहरण के लिए: जब भी उपयोगकर्ता 'pza' टाइप करते हैं, तो टाइप-आगे को सुझाव में से एक के रूप में 'पिज्जा' प्रदर्शित करना चाहिए।

मैं mongodb का उपयोग करके ऐसी कार्यक्षमता को कैसे कार्यान्वित कर सकता हूं?

कृपया ध्यान दें, खोज तत्काल होनी चाहिए, क्योंकि खोज परिणाम टाइप-अग्रेषित विजेट द्वारा लाया जाएगा। जिन संग्रहों पर मैं खोज क्वेरी चलाता हूं, उनमें सबसे अधिक 1 मिलियन प्रविष्टियां होती हैं।

मैंने लेवेनशेटिन दूरी एल्गोरिदम लागू करने के बारे में सोचा, लेकिन यह प्रदर्शन धीमा कर देगा, क्योंकि संग्रह विशाल है।

मैंने पढ़ा है कि एमओटीओ 2.6 में एफटीएस (पूर्ण पाठ खोज) अब काफी स्थिर है, लेकिन मेरी आवश्यकता लगभग एफटीएस नहीं है। एफटीएस 'पिज्जा' के लिए 'pza' वापस नहीं करेगा।

कृपया मुझे कुशल तरीका सुझाएं।

मैं नोड जेएस mongodb देशी ड्राइवर का उपयोग कर रहा हूँ।

+0

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

उत्तर

10

text search मोंगोडीबी (2.6 के रूप में) में सुविधा फ़ज़ी/आंशिक स्ट्रिंग मिलान के लिए कोई अंतर्निहित विशेषताएं नहीं है। जैसा कि आपने नोट किया है, वर्तमान में उपयोग का मामला मूल बूलियन ऑपरेटर और शब्द/वाक्यांश मिलान के साथ भाषा & पर समर्थन करने पर केंद्रित है।

अपनी आवश्यकताओं पर निर्भर करता है फजी मिलान के लिए विचार करने के लिए कई संभावित दृष्टिकोण हैं और कैसे आप "कुशल" अर्हता प्राप्त करना चाहते हैं (गति, भंडारण, डेवलपर समय, आवश्यक बुनियादी ढांचे, आदि):

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

    कुछ और विस्तृत उदाहरणों के लिए, देखें: Efficient Techniques for Fuzzy and Partial matching in MongoDB

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

    उदाहरण के लिए देखें: How to Perform Fuzzy-Matching with Mongo Connector and Elastic Search। नोट: लोचदार खोज fuzzy query लेवेनशेटिन दूरी पर आधारित है।

  • ट्विटर के ओपन सोर्स typeahead.js जैसे स्वत: पूर्ण लाइब्रेरी का उपयोग करें, जिसमें एक सुझाव इंजन और क्वेरी/कैशिंग API शामिल है। टाइपहेड वास्तव में किसी अन्य बैकएंड दृष्टिकोण के पूरक है, और इसके (वैकल्पिक) सुझाव इंजन Bloodhound स्थानीय संग्रहण में प्रीफेचिंग के साथ-साथ कैशिंग डेटा का समर्थन करता है।

0

इसके लिए सबसे अच्छा मामले फजी क्वेरी elasticsearch का उपयोग करेंगे: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html

यह बॉक्स से बाहर Levenshtein दूरी एल्गोरिथ्म का समर्थन करता है और अतिरिक्त सुविधाओं जो अपनी आवश्यकताओं के लिए उपयोगी हो सकता है: अर्थात् - अधिक इस - शक्तिशाली पहलू/समेकन - स्वत: पूर्ण

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