2010-10-29 15 views
5

के बाद सोलर/लुसीन इंडेक्स "अद्यतित" होने के लिए सर्वोत्तम अभ्यास है, हमारे पास एक लंबी इंडेक्स पुनर्निर्माण के दौरान सर्वोत्तम अभ्यास/प्रोग्रामिंग के बारे में एक सामान्य प्रश्न है। यह सवाल "सोलर विशिष्ट" नहीं है बल्कि कच्चे लुसीन या किसी अन्य समान इंडेक्सिंग टूल/लाइब्रेरी/ब्लैक बॉक्स पर भी लागू हो सकता है।लंबे समय से पुनर्निर्माण

सवाल

क्या Solr/Lucene सूचकांक सुनिश्चित करने के लिए सबसे अच्छा अभ्यास है लंबे सूचकांक के बाद "बिल्कुल तारीख तक" के पुनर्निर्माण है यानी अगर, एक 12 घंटे सूचकांक के दौरान पुनर्निर्माण, उपयोगकर्ताओं को जोड़ने की है/डीबी रिकॉर्ड्स या फाइलों को बदलें/हटाएं (पीडीएफ), आप कैसे सुनिश्चित करते हैं कि पुनर्निर्माण सूचकांक बहुत अंत में "इन" परिवर्तनों को शामिल करता है?

प्रसंग

  • बड़े डेटाबेस और फ़ाइल (जैसे pdfs) Solr में अनुक्रमित
  • मल्टी कोर Solr उदाहरण है, जहां core0 "खोज" और सभी/परिवर्तन जोड़ने के लिए है/हटाता core1 के लिए है "पुनर्निर्माण" कोर 1 एक "अस्थायी कोर" है।
  • core0 को हम पुनर्निर्माण 'चाल' core1 की समाप्ति के बाद

    • तो खोज और अद्यतन ताजा पुनर्निर्माण डाटाबेस के खिलाफ

    वर्तमान दृष्टिकोण जाना प्रक्रिया के पुनर्निर्माण डाटाबेस प्रश्नों और/या "सभी डीबी रिकॉर्ड्स" या "सभी फाइलें"

  • के लिए फाइल सिस्टम को ट्रैवर्स करता है यदि पुनर्निर्माण क्वेरी/फ़ाइल सिस्टम ट्रैवर्सल के अंत में होता है तो नया डीबी रिकॉर्ड/पीडीएफ "प्राप्त" करेगा। (उदाहरण के लिए तत्व element_id द्वारा तत्व ऑर्डर से "चयन करें" है। अगर हम एक बार एक बड़ी सूची बनाने के बजाय परिणाम सेट खोलते हैं- परिणाम पृष्ठ में अंत में जोड़े गए प्रविष्टियां शामिल होंगी। इसी प्रकार यदि नई फाइलें "अंत में" (नया फ़ोल्डर या नई फ़ाइल) जोड़ दी जाती हैं, फ़ाइल ट्रैवर्सल में इन फ़ाइलों को शामिल किया जाएगा।
  • पुनर्निर्माण नहीं निम्नलिखित "प्राप्त करें": पुनर्निर्माण के लिए डीबी रिकॉर्ड्स/दस्तावेज़ों में परिवर्तन या हटाना प्रक्रिया पहले से ही संसाधित, "बस reindexed"

प्रस्तावित दृष्टिकोण

  • सोलर क्लाइंट में ट्रैक करें (यानी। एक डीबी तालिका के माध्यम से) डीबी/फाइल सिस्टम
  • पुनर्निर्माण के अंत में (लेकिन कोर को स्वैप करने से पहले) सभी परिवर्तन/परिवर्तन/हटाए गए हैं, इन परिवर्तनों को संसाधित करें: यानी सभी हटाए गए रिकॉर्ड्स/पीडीएफ इंडेक्स से हटाएं, सभी अद्यतन और परिवर्धन

पुन: अनुक्रमणिका

  • पर का पालन करें एक बेहतर दृष्टिकोण
  • Solr कोई जादू है core1 में core0 "मिल जाएँगी" का मतलब है

धन्यवाद

उत्तर

1

इस बिल्ली को त्वचा के कई तरीके हैं ....मुझे लगता है कि कोर 1 (उर्फ "डेक" कोर) की लंबी इंडेक्सिंग प्रक्रिया के दौरान आप पहले से ही आबादी वाले कोर 0 (उर्फ "लाइव" कोर) के खिलाफ उपयोगकर्ता क्वेरी चला रहे हैं।

  1. आप को अलग कर सकते हैं क्या बदल गया है, यही कारण है कि न सिर्फ लाइव कोर को अद्यतन? यदि आप लाइव कोर और पीडीएफ के आपके फाइल सिस्टम के खिलाफ पूछताछ चला सकते हैं कि कौन से दस्तावेज़ अपडेट किए गए हैं, और जो हटाए गए हैं, तो बस इसे लाइव कोर के खिलाफ करें, और इस ऑफ़लाइन प्रक्रिया को हटा दें। यह सबसे आसान होगा .... बस अपने सोलर दस्तावेज़ में पीडीएफ का अद्यतन समय डालें, यह पता लगाने के लिए कि कौन सा बदल गया है। यदि पीएलएफ सोलर में मौजूद नहीं है तो इसे जोड़ें। सोलर दस्तावेज़ आईडी की एक सूची रखें, और अंत में, किसी भी मिलान वाले पीडीएफ को हटाया नहीं जा सकता है। इस बीच आपके पास अभी भी आपके वास्तविक समय अपडेट आ रहे हैं।

  2. आप आने वाले लाइव अपडेट और मल्टीप्लेक्स (?) को प्रॉक्सी कर सकते हैं ताकि वे Core1 और Core0 दोनों पर जाएं। मैंने एक सरल प्रॉक्सी इंटरफ़ेस बनाया है और इसे बहुत सरल पाया है। इस तरह आपके सभी अपडेट आपके दोनों कोर पर जा रहे हैं और आपको कोई "सुलह" नहीं करना है।

  3. आखिरकार, आप दो कोर मर्ज कर सकते हैं: http://wiki.apache.org/solr/MergingSolrIndexes#Merging_Through_CoreAdmin मुझे वास्तव में पता नहीं है कि क्या होता है यदि आपके पास एक ही आईडी के साथ दो दस्तावेज़ हैं, या यदि कोई दस्तावेज़ एक कोर में मौजूद नहीं है, लेकिन दूसरे में है ... मुझे लगता है कि यह एक मिश्रित प्रक्रिया है, लेकिन आप इसमें खोदना चाहते हैं।

यह सुनकर प्यार कैसे होता है!

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