7

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

अब मैं एक पूर्ण टेक्स्ट खोज को कार्यान्वित करना चाहता हूं जो उपयोगकर्ता को आसानी से खोज वाक्यांश दर्ज करके आसानी से सभी प्रकार की सामग्री ढूंढने में सक्षम बनाता है। एप्लिकेशन में विभिन्न प्रकार की विभिन्न वस्तुओं को अलग-अलग संभालने पर, अब मुझे उन्हें खोज के लिए "एक साथ" रखना होगा। इसका मतलब है कि उपयोगकर्ता विभिन्न प्रकारों के बीच कोई भेद नहीं करता है, वह सिर्फ "xyz" में प्रवेश करता है और एक सूची में परिणाम प्राप्त करना चाहता है, संदेश आदि के साथ मिश्रित टिप्पणियां

विकल्प 1 खोज सेवा बनाना है जो खोज लाता है विभिन्न भंडारों के परिणामस्वरूप और संयुक्त आउटपुट (सॉर्टिंग, पेजिंग इत्यादि) तैयार करता है। लेकिन यह वास्तव में महंगा है जब डेटा पीछे बढ़ता है (और यह बढ़ेगा)।

तो मैं एक वैकल्पिक समाधान की तलाश में हूं। वर्तमान में मैं SQL सर्वर 2008 के साथ काम कर रहा हूं। मुझे जो मिला है वह lucene.net (http://lucene.apache.org/lucene.net/) है, लेकिन मैंने अभी तक अधिक समय निवेश नहीं किया है।

कोई सुझाव?

उत्तर

2

मैं निश्चित रूप से एसक्यूएल फुलटेक्स्ट क्षमताओं के साथ जाऊंगा। मैं समझता हूं कि कुछ सामग्री फाइलों, अन्य संरचनाओं में उपलब्ध हो सकती है, फिर भी, अधिकांश डेटा बैकएंड में होना चाहिए और एसक्यूएल फुलटेक्स्ट इंडेक्स आर्किटेक्चर-वार के साथ एक बढ़िया काम करता है।

मेरा सुझाव है कि आप एसक्यूएल फुलटेक्स्ट से शुरू करें और एक छोटा घटक बनाएं जो अन्य संसाधनों (यदि आवश्यक हो) से पूछताछ करें। मुझे लगता है कि 80% खोज योग्य सामग्री SQL सर्वर से आ रही है।

  1. http://msdn.microsoft.com/en-us/library/ms142571.aspx
  2. http://www.dotnetfunda.com/articles/article1019-implementing-fulltext-search-on-view-.aspx?sms_ss=dotnetshoutout
+0

यह SQL सर्वर से आने वाले डेटा का 100% भी है। तो आप सही हैं, मैं बस एक पुराना तरीका ले सकता हूं, यहां तक ​​कि संग्रहीत प्रक्रिया या सादा ADO.NET के साथ भी - शुक्र है कि मैं अभी भी भंडार का उपयोग कर रहा हूं। –

2

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

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

अन्य पूर्ण पाठ खोज इंजनों के लिए आपके पास Microsoft Search Server Express है, लेकिन आपको डेटा प्राप्त करने के लिए अपना खुद का सामग्री कनेक्टर बनाना होगा (फिर से आपके भंडारों के आधार पर)।

+0

@jfar: इसे प्रतिबिंबित करने के लिए मेरा उत्तर संपादित किया गया। मुझे अभी भी लगता है कि लुसेन के प्रतिस्थापन के रूप में रावेनडीबी का उपयोग सीधे एपीआई के मुकाबले एक विकल्प है। –

+0

ने अपना वोट अपडेट किया और आपके संपादन को दर्शाने के लिए टिप्पणी हटा दी;) – jfar

0

सीधे शब्दों में कहा, "उपयोग की प्रतिलिपि प्राप्त" पर्याप्त नहीं है:

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

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

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