2013-02-27 32 views
8

मैं बहुत Lucene करने के लिए नया हूँ, इसलिए तुम लोग :) से कुछ मदद मिल चाहते हैंLucene और एसक्यूएल सर्वर - सबसे अच्छा अभ्यास

पृष्ठभूमि: वर्तमान में मैं एसक्यूएल सर्वर में संग्रहीत दस्तावेज़ों है और पूर्ण के लिए Lucene उपयोग करना चाहते हैं SQL सर्वर में उन दस्तावेज़ों पर टेक्स्ट/टैग खोजें।

प्रश्न 1) इस मामले में, दस्तावेजों पर कीवर्ड खोज करने के लिए, क्या मुझे उन सभी दस्तावेजों को लुसीन इंडेक्स में डालना चाहिए? क्या इसका मतलब है कि डेटा डुप्लिकेशंस होगा (SQL सर्वर में से एक और दूसरा ल्यूसीन इंडेक्स में?) यह एक मामला हो सकता है क्योंकि हमारे पास बड़ी मात्रा में दस्तावेज हैं (लगभग 100 जीबी)। क्या यह अनिवार्य है?

क्यू 2) इसके अलावा, प्रत्येक दस्तावेज़ में टैग का एक सेट होता है (3 तक)। टैग खोज के लिए ल्यूसीन भी अच्छा विकल्प है? यदि हां, तो यह कैसे करें?

धन्यवाद,

उत्तर

5

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

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

लुसीन निश्चित रूप से टैग खोज को कार्यान्वित कर सकता है। इसे लागू करने के आसान तरीका अपने द्वारा चयनित किसी क्षेत्र के लिए प्रत्येक टैग को जोड़ने के लिए हो सकता है, (मैं फोन करता हूँ "टैग" है, जो समझ बनाने के लिए लगता है), जैसे दस्तावेज़ के निर्माण, जबकि:

document.add(new Field("tags", "widget", Field.Store.NO, Field.Index.ANALYZED)); 
document.add(new Field("tags", "forkids", Field.Store.NO, Field.Index.ANALYZED)); 

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

some stuff +tags:forkids 
1

दस्तावेज भी Lucene में संग्रहित किया जा सकता है, तो आप निकालते हैं और दस्तावेज़ आईडी का उपयोग कर उन्हें संदर्भित कर सकते हैं।

मैं ल्यूसीन के शीर्ष पर सोलर http://lucene.apache.org/solr/ का उपयोग करने का सुझाव दूंगा, अधिक उपयोगकर्ता के अनुकूल है और इसमें डिफ़ॉल्ट रूप से उपलब्ध बहुवृत्त फ़ील्ड (टैग के लिए) हैं।

http://wiki.apache.org/solr/SchemaXml

+0

आपके उत्तर के लिए धन्यवाद। तो क्या आपको लगता है कि केवल लुसीन में दस्तावेजों को बनाए रखना एक सामान्य वास्तुकला होगा? डेटाबेस और ल्यूसीन में डेटा को बनाए रखने का कोई मामला है? – soleiljy

+0

यदि आप केवल वास्तविक सामग्री में रुचि रखते हैं और कुछ मेटाडाटा मुझे अतिरिक्त डेटाबेस की आवश्यकता नहीं है। – Elmer

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