Zoeken…


Opmerkingen

Sitecore zoeken is gebouwd bovenop Lucene en biedt de mogelijkheid om zeer snelle zoekmogelijkheden voor uw site te creëren. In plaats van te zoeken naar een gecentraliseerde database (zoals de SQL DB van Sitecore), worden query's uitgevoerd op Lucene-indexbestanden die zijn opgeslagen op het fysieke bestandssysteem van de webserver. Sitecore biedt een abstractielaag over de Lucene.NET API inclusief een LINQ-provider waardoor het schrijven van Lucene-zoekopdrachten een eenvoudig en vertrouwd proces is voor .NET-ontwikkelaars. Sitecore wordt geleverd met een aantal standaardindexen die u zelf kunt uitbreiden of definiëren. U kunt er ook voor kiezen om SOLR te gebruiken; een gecentraliseerd en schaalbaar platform gebouwd bovenop Lucene.

Configuratie

Sitecore wordt geleverd met vooraf ingestelde standaardindexen die u kunt uitbreiden of zelf kunt definiëren. Van de vooraf geconfigureerde zijn sitecore_master_index & sitecore_web_index meest interessant voor uw site-zoekopdracht. Dit zijn de vooraf gedefinieerde indexen voor al uw Sitecore-items in respectievelijk de structuur van uw master- en webdatabase, en zijn geconfigureerd om alle standaardvelden van een Sitecore-item op te slaan die gemeenschappelijk zijn voor alle sjablonen.

U kunt deze configuratie van de standaardwebindex op deze locatie bekijken: <Your Site>\App_Config\Include\Sitecore.ContentSearch.Lucene.Index.Web.config

De belangrijkste aandachtsgebieden van de configuratie van een index zijn:

  • De veldconfiguratie - Welke velden moeten in de index worden opgeslagen en hoe moeten ze worden opgeslagen.
  • De strategie - Hoe en wanneer moet de index worden bijgewerkt.
  • The Crawler - De locatie waar de index de Sitecore-gegevens kan krijgen

Veldconfiguratie

Kijkend in de configuratie van sitecore_web_index , ziet u de volgende referentie: <configuration ref="contentSearch/indexConfigurations/defaultLuceneIndexConfiguration" /> . Dit verwijst naar een gedeeld <Your Site>\App_Config\Include\Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config dat u hier kunt vinden: <Your Site>\App_Config\Include\Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config . Hier kunt u alle velden zien die zijn opgenomen in de standaardconfiguratie.

Er zijn in principe twee manieren om een veld te definiëren: het veld is rechtstreeks afkomstig van een Sitecore-itemveld of het is een berekend veld. Met een berekend veld kunt u code schrijven om enkele berekeningen uit te voeren en het resultaat in het veld op te slaan. Deze code wordt uitgevoerd wanneer de index wordt gebouwd / bijgewerkt, niet wanneer de index wordt opgevraagd. Dit is met name handig als het veld geaggregeerde gegevens moet opslaan, zoals tellingen enz.

Binnen het element <fieldMap> ziet u de elementen <fieldNames hint="raw:AddFieldByFieldName"> & <fields hint="raw:AddComputedIndexField"> , die respectievelijk de direct ingevoerde velden en de berekende velden bevatten.

Strategie

De strategie van uw index bepaalt wanneer uw index wordt bijgewerkt. Er zijn de volgende opties om uit te kiezen:

  • OnPublishEndAsynchronousStrategy (onPublishEndAsync) - Wanneer een item wordt gepubliceerd, wordt de index asynchroon bijgewerkt.
  • SynchronousStrategy (syncMaster) - Wanneer een item wordt opgeslagen, wordt de index onmiddellijk en synchroon bijgewerkt.
  • IntervalAsynchronousStrategy (intervalAsyncCore / intervalAsyncMaster) - Controleer regelmatig op artikelupdates en update de index asynchroon
  • ManualStrategy - Geen automatische indexupdates . Indexen worden alleen handmatig bijgewerkt (via het bedieningspaneel of programmatisch)
  • RebuildAfterFullPublishStrategy (rebuildAfterFullPublish) - Na een publicatie wordt de index volledig opnieuw opgebouwd
  • RemoteRebuildStrategy (remoteRebuild) - Deze strategie is voor meerdere instanties van Sitecore. Als bijvoorbeeld opnieuw opbouwen wordt gevraagd vanaf de contentbeheerserver, zullen de externe contentbezorgingsservers geabonneerd zijn op deze gebeurtenis en hun eigen indexen opnieuw opbouwen.

Standaard is de hoofdindex geconfigureerd als syncMaster . Dit komt omdat als u in de ervaringseditor items opslaat en op de pagina de resultaten van een index weergeeft, u wijzigingen die u in items hebt aangebracht meteen in de resultaten wilt zien. De webindex is geconfigureerd als 'onPublishEndAsync', dit komt omdat de indexen van uw webdatabase alleen moeten worden bijgewerkt wanneer items worden gepubliceerd vanuit de hoofddatabase naar het web.

U kunt ook meerdere strategieën combineren. Als u bijvoorbeeld afzonderlijke Sitecore-instanties hebt voor uw inhoudbeheer (CM) & onPublishEndAsync (CD), zou het zinvol zijn om de onPublishEndAsync te combineren met remoteRebuild , zodat CD-indexen worden bijgewerkt wanneer items worden gepubliceerd en opnieuw worden opgebouwd wanneer een gebruiker activeert een herbouw vanaf het bedieningspaneel van de CM-server.

U kunt uw strategie kiezen met behulp van de volgende configuratie:

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

The Crawler

Hiermee kunt u de locatie opgeven van de Sitecore-gegevens die u wilt indexeren. De webindex heeft de volgende standaardconfiguratie:

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

De twee belangrijke bits zijn de elementen <Database> en <Root> . Met het element <Root> kunt u de startpositie in uw Sitecore-structuur opgeven die de index moet indexeren. In werkelijkheid heeft u waarschijnlijk een 'Home'-knooppunt onder het inhoudsknooppunt waarnaar u hiernaar verwijst, zodat het alleen werkelijke inhoud / pagina's indexeert in plaats van uw sjablonen, enz.

Maak een inkomend filter voor de zoekopdracht

Inkomend filter wordt toegepast wanneer item wordt toegevoegd aan de zoekindex en maakt het mogelijk om aan te geven of item wordt opgenomen in de index of niet.

Voorbeelden wanneer inkomend filter kan worden gebruikt - neem geen standaardwaarden en eerdere versies van het item op in de index.

Inkomende filters worden ingesteld in de configuratie:

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

Code implementatie:

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

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

Meer voorbeelden en informatie zijn te vinden op http://www.sitecore.net/learn/blogs/technical-blogs/sitecore-7-development-team/posts/2013/04/sitecore-7-inbound-and-outbound- filter-pipelines.aspx

Maak een uitgaand filter voor de zoekopdracht

Uitgaand filter kan worden gebruikt om de zoekresultaten te filteren.

Een van de voorbeelden van uitgaand filtergebruik is het verwijderen van items waartoe de gebruiker geen toegang heeft uit de zoekresultaten.

Uitgaande filters worden ingesteld in de configuratie:

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

Voorbeeld van implementatie van een uitgaand filter:

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

Meer voorbeelden en informatie zijn te vinden op http://www.sitecore.net/learn/blogs/technical-blogs/sitecore-7-development-team/posts/2013/04/sitecore-7-inbound-and-outbound- filter-pipelines.aspx

Verwijder alle vorige versies van het item in de index wanneer u een nieuwe versie toevoegt

Standaard voegt Sitecore alle versies van het item toe aan de sitecore_master_index. Het nadeel hiervan is dat als gebruikers workflows gebruiken en veel versies toevoegen, ze allemaal worden toegevoegd aan de zoekresultaten in de inhoudeditor.

Configuratie:

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

Implementatie van handler

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow