2011-11-24 16 views
6

स्थितिSitecore Lucene: फिर से सूचकांक बच्चे (या माता पिता) आइटम

को अद्यतन करने पर आइटम मैं निम्नलिखित Sitecore Lucene config है:

  • नए सूचकांक, type = "Sitecore.Search.Index , Sitecore.Kernel, "(गणना की" क्षेत्रों
  • प्रत्येक क्रॉलर अपनी विशिष्ट टेम्पलेट GUID संभालती
  • दो क्रॉलर्स एक कस्टम क्रॉलर कि अतिरिक्त कहते हैं) होता है "क्योंकि वे विभिन्न गणना क्षेत्रों
  • शामिल

समस्या

गणना क्षेत्रों माता पिता/बच्चे क्षेत्रों पर आधारित हैं। साइटकोर में ल्यूसीन कैसे स्थापित किया जाता है, यह है कि आइटमों के लिए केवल दस्तावेज जो वास्तव में बदल दिए गए थे, इंडेक्स में अपडेट किए गए हैं।

ऐसे में, अन्य दस्तावेजों (जो आवश्यक हैं, इन क्षेत्रों पर खोज की स्थिति हैं) पर गणना की गई फ़ील्ड अपडेट नहीं की गई हैं।

प्रश्न

इसकी संभावना मैन्युअल सूचकांक में अन्य मदों के अपडेट लागू करने के है?
मैंने साइटकोर.Search.Index को विरासत में देखा है, लेकिन प्रासंगिक विधियों में से कोई भी वर्चुअल नहीं है।

इसके अलावा, मैंने इंडेक्सिंगप्रोवाइडर-इवेंट्स की सदस्यता लेने की कोशिश की:
सार्वजनिक ईवेंट इवेंट हैंडलर ऑनरमोव इटिम;
सार्वजनिक कार्यक्रम EventHandler OnRemoveVersion;
सार्वजनिक कार्यक्रम EventHandler OnUpdateItem;

इसके पीछे का विचार डेटाबेस क्रॉलर में ऑन-अपडेट इटिम-इवेंट को अन्य आइटम्स के लिए ट्रिगर करना था, जिसे अपडेट करने की आवश्यकता है, लेकिन आप इंडेक्सिंगप्रोवाइडर के बाहर से इस ईवेंट को ट्रिगर नहीं कर सकते।

क्या कोई पूर्ण पुनर्निर्माण किए बिना इंडेक्स अपडेट ट्रिगर करने का कोई तरीका है, जिसमें उन अन्य वस्तुओं को सहेजने/पुन: प्रकाशित करने में शामिल नहीं है?

धन्यवाद!
Sander

उत्तर

4

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

Sitecore.Data.Managers.IndexingManager.InitializeEventHandlers() डेटाबेस के HistoryEngine पर हैंडलर को जोड़ने का एक उदाहरण है।

फिर अपने हैंडलर तर्क संलग्न करने के लिए यह शायद initialize पाइप लाइन में है सबसे अच्छी जगह की तरह

protected void HistoryEngine_AddedEntry(object sender, HistoryAddedEventArgs e) 
{ 
    Item item = e.Database.GetItem(e.Entry.ItemId); 
    //TODO: Add logic to make sure e.Entry.ItemId requires a parent/child reindex as well 
    //TODO: Make sure that logic also prevents excessive or infinite recursion since we'll be triggering the AddedEntry event again below 
    Item parent = item.Parent; 
    //RegisterItemSaved doesn't appear to do anything with its second argument 
    e.Database.Engines.HistoryEngine.RegisterItemSaved(parent, null); 
} 

कुछ होगा।

एनबी। यह एक अवांछित विचार है, कृपया अपने परिणामों पर वापस रिपोर्ट करें!

+0

अतिरिक्त प्रविष्टियों के साथ HistoryEngine को ट्रिगर नहीं करेगा अन्य साइटकोर घटकों पर कोई प्रतिकूल दुष्प्रभाव है? यह एक उचित दृष्टिकोण की तरह लगता है, इसलिए मैं इसे जल्द ही कोशिश करूंगा। मैं जल्द ही रिपोर्ट करूंगा, पहले कुछ अन्य स्प्रिंट कार्यों को पूरा करने की आवश्यकता है;) – sanderd

+1

परावर्तक में विश्लेषण इंडेक्सिंग प्रबंधक को HistoryEngine.AddedEntry के लिए एकमात्र श्रोता के रूप में दिखाता है, इसलिए आप शायद वहां सुरक्षित हैं। गारंटी नहीं दे सकता कि क्या उस सम्मान में भविष्य का सबूत है, मुझे लगता है। उस ने कहा, यह एक मुद्दा लाता है कि आपके अतिरिक्त एंट्री श्रोता को अनंत रिकर्सन को रोकने के लिए तर्क होना चाहिए। संपादित करेंगे – techphoria414

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