2012-02-07 6 views
12

हम अपने mongodb उदाहरण पर पूर्ण-पाठ खोज के लिए elasticsearch का उपयोग करने की रणनीति विकसित करने की कोशिश कर रहे हैं। ऐसा लगता है कि फ़िल्टर के रूप में उपयोग करने के लिए हर कुंजी को एलिस्टिक्स इंडेक्स में शामिल किया जाना चाहिए। संभावित रूप से हम एक कुंजी के रूप में मोंगो में हर कुंजी का उपयोग करना चाह सकते हैं - यानी विवरण पर पूर्ण-पाठ खोज, दिनांक और टेलीफोन नंबर द्वारा फ़िल्टर करें। क्या किसी के पास मोंगो को पूर्ण-पाठ जोड़ने का कोई वास्तविक-दुनिया अनुभव है कि वे साझा कर सकते हैं?mongodb fulltext खोज रणनीति

शायद हम लोचदार खोज को डीबी के रूप में उपयोग कर सकते हैं?

उत्तर

14

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

यदि आपको स्टेमिंग, अस्पष्ट खोज, जटिल वाइल्डकार्ड खोज की आवश्यकता नहीं है, तो आप mongoDb के साथ खोज कर सकते हैं। जब नया दस्तावेज़ डाला जाता है, इसे कम मामले में शब्दों में विभाजित करें, और उदाहरण के लिए सरणी "शब्द" में जोड़ें। बाद में आप regex के साथ इस सरणी के विरुद्ध खोज अनुरोध कर सकते हैं। इस रेगेक्स में आप I (केस अनदेखा करें) विकल्प का उपयोग नहीं कर सकते हैं, और आप केवल LIKE% वाइल्डकार्ड (या वाइल्डकार्ड के बिना) खोज सकते हैं, अन्यथा खोज mongoDb अनुक्रमणिका का उपयोग नहीं करेगी।

एक और विकल्प - आप MongoDB

एक अन्य विकल्प के लिए river खोजने की कोशिश कर सकते हैं - अगर आप जावा का उपयोग कर रहे Lucene उपयोग करने के लिए है। शायद आप Directory कक्षा को इस तरह से विस्तारित करने में सक्षम होंगे, कि लुसीन फाइल सिस्टम या रैम के बजाय मोंगो डीबी में इंडेक्स स्टोर करेगा। मैंने इस क्षेत्र में कोई शोध नहीं किया है, लेकिन मुझे लगता है कि यह संभव है

+0

धन्यवाद उमर, हम आपके approcah एक कोशिश – stew

+0

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

+0

रेगेक्स mongodDb के साथ भी इंडेक्स का उपयोग कर सकते हैं जैसा मैंने उत्तर में बताया है, यह रेगेक्स के प्रकार पर निर्भर करता है – Anton

9

मैंने @Umar सुझाए गए स्ट्रिंग में शब्दों को विभाजित करके मोंगोडीबी में पूर्ण पाठ खोज के साथ प्रयोग किया। ईमानदारी से हालांकि, यह एक डेटाबेस है और एक खोज इंजन नहीं है, इसलिए मैं लगातार स्टोरेज के लिए मोंगो का उपयोग करता हूं और इसके खोज इंजन भाग के लिए लोचदार खोज। वास्तव में, मैं लगातार भंडारण के लिए पोस्टग्रेस्क्ल जैसे कुछ के साथ रहूंगा और उसके बाद उस डेटा को धक्का दूंगा जिसे आप खोज इंजन में खोजना चाहते हैं। http://gdal.org/ogr/drv_elasticsearch.html एक ड्राइवर है जो आपको अपने डेटा को एक RDBMS से ElasticSearch तक त्वरित रूप से निर्यात करने की अनुमति देगा। जीडीएएल का उपयोग करने के लिए डेटा को भू-स्थानिक होने की आवश्यकता नहीं है जब तक कि वे इनपुट स्रोत से कनेक्ट करने का एक तरीका न हों।

एडम