2009-06-13 13 views
5

मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जहां मेरे पास बहुत अधिक डेटा होगा, और यह कई रूपों से खोजने योग्य होगा जो SQL क्वेरीज़ के रूप में बहुत कुशलतापूर्वक व्यक्त किए जाते हैं, लेकिन इसे प्राकृतिक भाषा प्रसंस्करण के माध्यम से भी खोजा जाना चाहिए।लुसेन.NET और एक संबंधपरक डेटाबेस के संयोजन के लिए सर्वोत्तम अभ्यास?

मेरी योजना इस खोज के रूप में लुसीन का उपयोग कर इंडेक्स बनाना है।

मेरा सवाल यह है कि यदि मैं ऐसा करता हूं, और एक खोज करता हूं, तो लुसेन फिर सूचकांक में आईडी के मिलान दस्तावेजों को वापस कर देगा, फिर मुझे इन संस्थाओं को संबंधपरक डेटाबेस से देखना होगा।

यह दो तरीकों से किया जा सकता है (यही कारण है कि मैं की अब तक सोच सकते हैं):

  • N क्वेरी (भयानक)
  • पास सब आईडी की राशि एक संग्रहीत प्रक्रिया के लिए एक ही बार में (शायद के रूप में एक अल्पविराम सीमित पैरामीटर)। इसमें अधिकतम पैरामीटर आकार तक सीमित होने का नकारात्मक हिस्सा है, और एक अस्थायी तालिका में स्ट्रिंग को विभाजित करने के लिए यूडीएफ के धीमे प्रदर्शन।

मैं लगभग lucenes सूचकांक में सब कुछ दर्पण, ताकि मैं periodicly समर्थन की दुकान से सूचकांक उत्पन्न कर सकते हैं, लेकिन केवल दृश्यपटल के लिए इसे उपयोग करने की जरूरत है परीक्षा रहा हूँ।

सलाह?

+0

हाय। क्या आपने अपना प्रोजेक्ट पूरा किया? तुमने क्या किया? – Eduardo

उत्तर

2

जब मुझे इस समस्या का सामना करना पड़ा तो मैं एक रिलेशनल डेटाबेस के साथ गया जिसमें पूर्ण-पाठ खोज क्षमताएं थीं (मैंने पोस्टग्रेएसक्यूएल 8.3 का उपयोग किया था, जो स्टेमिंग और थिसॉरस समर्थन के साथ फीट समर्थन में बनाया गया है)। इस तरह डेटाबेस SQL ​​और ft कमांड दोनों का उपयोग कर क्वेरी कर सकता है। नकारात्मकता यह है कि आपको एक डीबी की आवश्यकता है जिसमें पूर्ण-पाठ-खोज क्षमताएं हों, और ये क्षमताएं ल्यूसीन क्या कर सकती हैं उससे कम हो सकती हैं।

4

मैं किसी भी डीबी इंटरैक्शन से परहेज करते हुए, इंडेक्स के अंदर 'फ्रंटेंड' डेटा स्टोर करता हूं। डीबी केवल तभी पूछे जाएंगे जब आप विशिष्ट रिकॉर्ड पर अधिक जानकारी चाहते हैं।

1

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

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

+0

मुझे लगता है कि लुसीन में मेमोरी कैशिंग है। नहीं? –

0

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

आप इन-मेमोरी कैश से भी आगे निकल सकते हैं और खोज सूचकांक में एक खोज परिणाम प्रदर्शित करने के लिए सभी आवश्यक गुणों को स्टोर कर सकते हैं। मैंने ऐसा नहीं किया क्योंकि खोज के अलावा अन्य परिदृश्यों में इन-मेमोरी कैश का भी उपयोग किया जाता है।

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

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