खोज…


टिप्पणियों

साइटक खोज ल्यूसिन के शीर्ष पर बनाया गया है, जो आपकी साइट के लिए बहुत तेजी से खोज क्षमता बनाने की क्षमता प्रदान करता है। एक केंद्रीकृत डेटाबेस (जैसे कि साइटकोर एसक्यूएल डीबी) के खिलाफ क्वेरी करने के बजाय, यह ल्यूसीन इंडेक्स फाइलों पर सवाल उठाता है जो वेब-सर्वर की भौतिक फाइल सिस्टम पर संग्रहीत हैं। Sitecore एक LINQ प्रदाता सहित Lucene.NET API पर अमूर्तता की एक परत प्रदान करता है जो Lucene Questions को .NET डेवलपर्स के लिए एक सरल और परिचित प्रक्रिया बनाता है। कुछ मानक इंडेक्स के साथ सीथकोर जहाज कॉन्फ़िगर किए गए हैं जिन्हें आप अपना खुद का विस्तार या परिभाषित कर सकते हैं। आप एसओएलआर का उपयोग करने का विकल्प भी चुन सकते हैं; ल्यूसिने के शीर्ष पर बनाया गया एक केंद्रीकृत और स्केलेबल मंच।

विन्यास

पूर्व-कॉन्फ़िगर किए गए मानक अनुक्रमित के एक सेट के साथ सीथकोर जहाज जिसे आप विस्तारित कर सकते हैं, या आप अपने स्वयं को परिभाषित कर सकते हैं। पूर्व-कॉन्फ़िगर किए गए, आपकी साइट खोज के लिए sitecore_master_index & sitecore_web_index सबसे अधिक रुचि रखते हैं। ये क्रमशः आपके मास्टर और वेब डेटाबेस के पेड़ में आपके सभी Sitecore आइटम के लिए पूर्वनिर्धारित अनुक्रमित हैं, और सभी टेम्पलेट के बीच सामान्य होने वाले Sitecore आइटम के सभी मानक क्षेत्रों को संग्रहीत करने के लिए कॉन्फ़िगर किए गए हैं।

आप इस स्थान पर मानक वेब इंडेक्स के इस विन्यास को देख सकते हैं: <Your Site>\App_Config\Include\Sitecore.ContentSearch.Lucene.Index.Web.config

सूचकांक के विन्यास के महत्व के मुख्य क्षेत्र हैं:

  • फ़ील्ड कॉन्फ़िगरेशन - किस फ़ील्ड को इंडेक्स में संग्रहीत किया जाना चाहिए, और उन्हें कैसे संग्रहीत किया जाना चाहिए।
  • रणनीति - सूचकांक को कैसे और कब अद्यतन किया जाना चाहिए।
  • क्रॉलर - वह स्थान जहां सूचकांक प्राप्त कर सकता है, यह साइटकोर डेटा है

फ़ील्ड कॉन्फ़िगरेशन

sitecore_web_index कॉन्फ़िगरेशन को देखते हुए, आप निम्न संदर्भ देख सकते हैं: <configuration ref="contentSearch/indexConfigurations/defaultLuceneIndexConfiguration" /> । यह यहां मिली एक साझा इंडेक्स कॉन्फ़िगरेशन फ़ाइल को संदर्भित करता है: <Your Site>\App_Config\Include\Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config । यहां आप उन सभी क्षेत्रों को देख सकते हैं जो मानक कॉन्फ़िगरेशन में शामिल हैं।

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

<fieldMap> तत्व के भीतर आप उन तत्वों को देखेंगे <fieldNames hint="raw:AddFieldByFieldName"> और <fields hint="raw:AddComputedIndexField"> , जिसमें क्रमशः सीधे <fields hint="raw:AddComputedIndexField"> फ़ील्ड और गणना किए गए फ़ील्ड शामिल हैं।

रणनीति

जब आपके सूचकांक को अपडेट किया जाता है तो आपके सूचकांक की रणनीति निर्धारित करती है। चुनने के लिए निम्नलिखित विकल्प हैं:

  • OnPublishEndAsynchronousStrategy (onPublishEndAsync) - जब कोई आइटम प्रकाशित होता है, तो सूचकांक को अतुल्यकालिक रूप से अपडेट किया जाएगा।
  • SynchronousStrategy (SyncMaster) - जब कोई आइटम सेव होता है, तो इंडेक्स को तुरंत और सिंक्रोनाइज़ किया जाएगा।
  • IntervalAsynchronousStrategy (intervalAsyncCore / intervalAsyncMaster) - समय-समय पर आइटम अपडेट के लिए जाँच करें और सूचकांक को अतुल्यकालिक रूप से अपडेट करें
  • ManualStrategy - कोई स्वचालित अनुक्रमणिका अद्यतन नहीं। इंडेक्स केवल मैन्युअल रूप से अपडेट किए जाएंगे (नियंत्रण कक्ष के माध्यम से, या प्रोग्रामिक रूप से)
  • RebuildAfterFullPublishStrategy (पुनर्निर्माण के बाद FullPublish) - एक प्रकाशन के बाद, सूचकांक को पूर्ण रूप से फिर से बनाया जाएगा।
  • RemoteRebuildStrategy (RemoteRebuild) - यह रणनीति Sitecore के कई उदाहरणों के लिए है। उदाहरण के लिए, यदि सामग्री प्रबंधन सर्वर से पुनर्निर्माण का आह्वान किया जाता है, तो दूरस्थ सामग्री वितरण सर्वर इस घटना के लिए सदस्यता लेंगे और अपने स्वयं के अनुक्रमितों का पुनर्निर्माण करेंगे।

डिफ़ॉल्ट रूप से, मास्टर इंडेक्स को syncMaster रूप में कॉन्फ़िगर किया syncMaster । ऐसा इसलिए है क्योंकि यदि आप अनुभव संपादक के आइटम सहेजने में हैं और पृष्ठ पर रेंडर करना किसी अनुक्रमणिका के परिणामों को प्रदर्शित करता है, तो आप परिणामों में तुरंत अपने द्वारा किए गए परिवर्तनों को देखना चाहेंगे। वेब इंडेक्स को 'onPublishEndAsync' के रूप में कॉन्फ़िगर किया गया है, इसका कारण यह है कि आपके वेब डेटाबेस के इंडेक्स को केवल अपडेट करने की आवश्यकता होती है जब मास्टर डेटाबेस से वेब पर आइटम प्रकाशित होते हैं।

आप कई रणनीतियों को भी जोड़ सकते हैं। उदाहरण के लिए, यदि आपके पास अपने सामग्री प्रबंधन (CM) और सामग्री वितरण (CD) के लिए अलग-अलग Sitecore इंस्टेंस हैं, तो यह remoteRebuild को onPublishEndAsync साथ संयोजित करने के लिए समझ में आता है, ताकि आइटम के प्रकाशित होने के साथ ही सीडी इंडेक्स अपडेट हो जाएं और फिर से बनाया जाए। एक उपयोगकर्ता CM सर्वर के नियंत्रण कक्ष से एक पुनर्निर्माण को चलाता है।

आप निम्न विन्यास का उपयोग करके अपनी रणनीति चुन सकते हैं:

<strategies hint="list:AddStrategy">
    <strategy ref="contentSearch/indexConfigurations/indexUpdateStrategies/onPublishEndAsync" />
</strategies>

क्रॉलर

यह आपको साइटकॉर डेटा का स्थान निर्दिष्ट करने की अनुमति देता है जिसे आप अनुक्रमित करना चाहते हैं। वेब इंडेक्स में निम्नलिखित डिफ़ॉल्ट कॉन्फ़िगरेशन है:

<locations hint="list:AddCrawler">
    <crawler type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
        <Database>web</Database>
        <Root>/sitecore</Root>
    </crawler>
</locations> 

दो महत्वपूर्ण बिट्स <Database> और <Root> तत्व हैं। <Root> तत्व आपको अपने साइटकेयर पेड़ में शुरुआती स्थिति को निर्दिष्ट करने की अनुमति देता है कि सूचकांक को अनुक्रमित करना चाहिए। वास्तव में, आपके पास सामग्री नोड के तहत एक 'होम' नोड होने की संभावना है जो आप इस पर इंगित करेंगे ताकि यह केवल आपके टेम्पलेट आदि के बजाय वास्तविक सामग्री / पृष्ठों को अनुक्रमित करे।

खोज के लिए एक इनबाउंड फ़िल्टर बनाएं

इनबाउंड फ़िल्टर तब लागू किया जाता है जब आइटम को खोज इंडेक्स में जोड़ा जाता है और यह निर्दिष्ट करने की अनुमति देता है कि आइटम इंडेक्स में शामिल है या नहीं।

जब इनबाउंड फ़िल्टर का उपयोग किया जा सकता है, तो उदाहरण - आइटम में मानक मान और पिछले संस्करण शामिल नहीं हैं।

इनबाउंड फ़िल्टर कॉन्फ़िगरेशन में सेट किए गए हैं:

<indexing.filterIndex.inbound>
 <processor type="Sitecore.ContentSearch.Pipelines.IndexingFilters.ApplyInboundIndexFilter, Sitecore.ContentSearch"></processor>
</indexing.filterIndex.inbound>  

कोड कार्यान्वयन:

public class ApplyInboundIndexVersionFilter : InboundIndexFilterProcessor   
{        
    public override void Process(InboundIndexFilterArgs args)       
    { 
        var item = args.IndexableToIndex as SitecoreIndexableItem;

        if (!item.Item.Versions.IsLatestVersion())            
        {                  
            args.IsExcluded = true;            
        }
    }
}

अधिक उदाहरण और जानकारी http://www.sitecore.net/learn/blogs/technical-blogs/sitecore-7-development-team/posts/2013/04/sitecore-7-inbound-and-outbound- फिल्टर-pipelines.aspx

खोज के लिए एक आउटबाउंड फ़िल्टर बनाएं

आउटबाउंड फ़िल्टर का उपयोग खोज परिणामों को फ़िल्टर करने के लिए किया जा सकता है।

आउटबाउंड फ़िल्टर उपयोग का एक उदाहरण उन आइटमों को निकाल रहा है, जिनकी उपयोगकर्ता के पास खोज परिणामों तक पहुंच नहीं है।

आउटबाउंड फ़िल्टर कॉन्फ़िगरेशन में सेट किए गए हैं:

<indexing.filterIndex.outbound>
 <processor type="Sitecore.ContentSearch.Pipelines.IndexingFilters.ApplyOutboundSecurityFilter, Sitecore.ContentSearch"></processor>
</indexing.filterIndex.outbound>

आउटबाउंड फ़िल्टर कार्यान्वयन का उदाहरण:

public class ApplyOutboundIndexWorkflowFilter : OutboundIndexFilterProcessor   
{        
    public override void Process(OutboundIndexFilterArgs args)       
    { 
        //You can use args.IsExcluded to remove items from the search results here
    }
}

अधिक उदाहरण और जानकारी http://www.sitecore.net/learn/blogs/technical-blogs/sitecore-7-development-team/posts/2013/04/sitecore-7-inbound-and-outbound- फिल्टर-pipelines.aspx

नए संस्करण को जोड़ने पर सूचकांक में आइटम के सभी पिछले संस्करणों को हटा दें

डिफ़ॉल्ट रूप से Sitecore आइटम के सभी संस्करणों को sitecore_master_index में जोड़ता है। इसका दोष यह है कि यदि उपयोगकर्ता वर्कफ़्लो का उपयोग कर रहे हैं और बहुत सारे संस्करण जोड़ रहे हैं, तो उन सभी को सामग्री संपादक में खोज परिणामों में जोड़ा जाएगा।

विन्यास:

<event name="item:versionAdded" >
              <handler type="FilterPatch.Library.ContentSearch.EventHandler, AssemblyName" method="Execute" />
       </event>

हैंडलर कार्यान्वयन

public class EventHandler
    {
        public void Execute(object sender, EventArgs eventArgs)
        {
            var item = Event.ExtractParameter(eventArgs, 0) as Item;

            //If item has less than 2 versions - then skip
            if(item.Versions.Count < 2)
            {
                return;
            }

            var indexableItem = new SitecoreIndexableItem(item);

            var index = ContentSearchManager.GetIndex(indexableItem);

            using (var context = index.CreateDeleteContext())
            {
                foreach(var version in item.Versions.GetVersions(true))
                {
                    if(!version.Versions.IsLatestVersion())
                    {
                        var indexableItemVersion = new SitecoreIndexableItem(version);
                        context.Delete(indexableItemVersion.UniqueId);
                    }
                }
                context.Commit();                
            }
        }
    }


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow