2009-02-02 12 views
5

मैं Lucene.net का उपयोग किया है खोज कोई समस्या नहीं के साथ कई छोटे वेबसाइटों पर (दोनों डेटाबेस सामग्री और अपलोड किए गए दस्तावेज़ के लिए) कार्यक्षमता लागू करने के लिए। अब मुझे एक साइट मिली है जहां मैं 5000+ दस्तावेज़ों (मुख्य रूप से पीडीएफ) को अनुक्रमणित कर रहा हूं और पूछताछ थोड़ी धीमी हो रही है।कैशिंग Lucene.net खोज परिणाम

मुझे लगता है कि इसे गति देने का सबसे अच्छा तरीका किसी प्रकार की कैशिंग लागू करना होगा। क्या कोई भी मेरे पॉइंटर्स/उदाहरण कहां से शुरू कर सकता है? यदि आपके पास कैशिंग से अलग कोई अन्य सुझाव है (उदाहरण के लिए मैं एकाधिक अनुक्रमणिका का उपयोग कर रहा हूं?) मैं उनको भी सुनना चाहता हूं।

संपादित करें:

बेवकूफ उपयोगकर्ता त्रुटि धीमी क्वेरी किए जाने के लिए जिम्मेदार। मैं केवल 'पेज' प्रदर्शित करने के बजाय, एक ही समय में सेट किए गए पूरे परिणामों के लिए हाइलाइट बना रहा था। उफ़।

उत्तर

5

मैं यहाँ एक बड़ा धारणा बनाने के लिए और आप अपनी अनुक्रमणिका खोजकर्ताओं पर फांसी नहीं कर रहे हैं ग्रहण करने के लिए के बीच कॉल सूचकांक क्वेरी करने के लिए जा रहा हूँ।

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

Btw, जावा डॉक्स (मैंने पाया) बस के रूप में .net संस्करण के लिए लागू होते हैं।

आपकी समस्या के बारे में अधिक जानकारी के लिए, यहाँ देखें: http://wiki.apache.org/lucene-java/ImproveSearchingSpeed

+0

अच्छा लिंक, धन्यवाद – Nick

+0

कोई जांच नहीं। क्या सब कुछ आपकी वेबसाइट पर ठीक काम कर रहा है? –

1

ल्यूसीन इंडेक्स पुनर्प्राप्ति को तेज संचालन करने के लिए अपनी आंतरिक "कैशिंग" तंत्र का उपयोग करता है। मुझे नहीं लगता कि कैशिंग आपके मुद्दे पर है, यद्यपि।

एक 5000-अनुक्रमणिका दस्तावेज़ आकार में मामूली लगता है, लेकिन यह काफी हद तक निर्भर करता है कि आप अपनी अनुक्रमणिका का निर्माण कैसे कर रहे हैं, आप क्या अनुक्रमणित/भंडारण कर रहे हैं, आप कैसे पूछ रहे हैं (परिचालन), दस्तावेज़ आकार, आदि

कृपया अपनी अनुक्रमणिका के बारे में जितना अधिक जानकारी के साथ रिक्त स्थान भरें।

Lucene.Net.Store.RAMDirectory 

आप इसे पसंद उपयोग कर सकते हैं:

1

पहले, Lucene ही निर्देशिका का इन-स्मृति संस्करण का समर्थन करता है

RAMDirectory idx = new RAMDirectory(); 

// Make an writer to create the index 
IndexWriter writer = 
    new IndexWriter(idx, new StandardAnalyzer(), true); 

यह आपके लिए काम करता है, लेकिन यह बहुत ज्यादा राम उपयोग कर रहा है, एक रैपर लिखें और इसे इंटरफ़ेस या webservice के रूप में बेनकाब करें। या, यदि आप कैश से बाहर निकलने पर नियंत्रण करने के लिए पूछ रहे हैं तो आप कैश करना चाहते हैं, तो आप लुसीन के चारों ओर एक रैपर लिख सकते हैं जो स्पष्ट रूप से खोजशब्दों के आधार पर आपके लिए सबसे आम परिणाम कैश करता है।

मैं forementioned पसंद करते हैं। RAMDirectory का उपयोग करके ल्यूसीन स्टोर के चारों ओर लपेटने वाली एक webservice या सेवा प्रोजेक्ट बनाएं। अगर आप इंडेक्स विशाल हैं तो बहुत सारे रैम के साथ आप किसी अन्य सर्वर पर webservice को ऑफ़लोड कर सकते हैं - और इसके पास तत्काल परिणाम हैं।

1

अपने अनुक्रमित अनुकूलन करने के लिए सुनिश्चित करें।

इसके अलावा, इस एक त्वरित/आसान/प्रभावी कैशिंग को लागू करने के तरीका है: HttpRuntime.Cache.Add (...);

आप किसी भी प्रकार की परियोजना/पुस्तकालय से एएसपी.Net कैश का उपयोग कर सकते हैं।

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