2010-03-11 12 views
5

मैं Lucene.Net में डेटाबेस से डेटा की एक पंक्ति अनुक्रमणित कर रहा हूँ। एक पंक्ति दस्तावेज़ के बराबर है।ल्यूसीन इंडेक्स में दस्तावेज़ जोड़ने पर मुझे DocId कैसे प्राप्त किया जा सकता है?

मैं अपने डेटाबेस को DocId के साथ अपडेट करना चाहता हूं, ताकि मैं परिणामों में DocId का उपयोग जल्दी से पंक्तियों को पुनर्प्राप्त करने में सक्षम हो सकूं।

मैं वर्तमान में परिणाम डॉक्स से पीके को पुनः प्राप्त करता हूं जो मुझे लगता है कि डॉकआईड का उपयोग कर डेटाबेस से सीधे सेवानिवृत्त होने से धीमा होना चाहिए।

लुसीन में दस्तावेज़ जोड़ने पर मुझे DocId कैसे मिल सकता है?

उत्तर

2

जैसा कि युवाल ने कहा था, आंतरिक ल्यूसीन कार्यान्वयन विवरण लीक करना बुरा है, खासकर जब सूचकांक उत्परिवर्तित होने पर लुसीन डॉक्टर आईडी का परिवर्तन खराब होता है।

यदि doc.get ("pk") का उपयोग करके प्राथमिक कुंजी को देखना आपके लिए बहुत धीमा है, तो सभी पीके की स्मृति में कैश करने के लिए फील्ड कैश का उपयोग करें। फिर लुकअप बहुत तेज़ होंगे।

+0

फ़ील्ड कैश का उपयोग करने के लिए कोई नमूना कोड स्निपेट? – Rohit

+0

मैं मानता हूं कि डॉक्टर आईडी पर भरोसा करना हमेशा खराब डिजाइन होता है। हालांकि, मेरे पास एक विशेष उपयोग केस है जिसमें मेरे पास केवल पढ़ने योग्य अनुक्रमणिका है और खोज क्वेरी के साथ क्या संभव है इसके बाहर कुछ प्रसंस्करण करने की आवश्यकता है, इसलिए मुझे बाद के संदर्भ के लिए कुछ दस्तावेज़ों के दस्तावेज़ आईडी को स्टोर करने की आवश्यकता है। क्या आप ऐसा करने के लिए फील्ड कैश का उपयोग करने पर विस्तृत जानकारी दे सकते हैं? – Lyle

3

लुसीन के डॉकआईड पर निर्भर करना एक बुरी नीति है, क्योंकि लुसीन भी इससे बचने की कोशिश करता है। मेरा सुझाव है कि आप अपना खुद का डॉक्टर बनाओ। डेटाबेस में मैं auto-increment field का उपयोग करूंगा। यदि आपका एप्लिकेशन एक रिलेशनल डेटाबेस का उपयोग नहीं करता है, तो आप इस प्रकार के क्षेत्र को प्रोग्रामेटिक रूप से बना सकते हैं। इसके अलावा, मेरा सुझाव है कि आप Search Engine versus DBMS पढ़ लें - मेरा मानना ​​है कि केवल फ़ील्ड जिन्हें खोजा जा सकता है, लुसीन में संग्रहीत किया जाना चाहिए; बाकी पंक्ति एक डेटाबेस में है, इसलिए घटनाओं का अनुक्रम है:

  1. लुसीन का उपयोग करके, कुछ पाठ की खोज करें और एक DocId प्राप्त करें।
  2. डेटाबेस से पूर्ण पंक्ति पुनर्प्राप्त करने के लिए DocId का उपयोग करें।
संबंधित मुद्दे