Suche…


Bemerkungen

Die Sitecore-Suche basiert auf Lucene und bietet die Möglichkeit, sehr schnelle Suchfunktionen für Ihre Website zu erstellen. Anstatt eine zentrale Datenbank (z. B. die SQL-Datenbank von Sitecore) abzufragen, werden Lucene-Indexdateien abgefragt, die im physischen Dateisystem des Webservers gespeichert sind. Sitecore bietet eine Abstraktionsebene über die Lucene.NET-API, einschließlich eines LINQ-Providers, wodurch das Schreiben von Lucene-Abfragen für .NET-Entwickler ein einfacher und vertrauter Prozess ist. Sitecore wird mit einigen konfigurierten Standardindizes geliefert, die Sie erweitern oder definieren können. Sie können auch SOLR verwenden. eine zentralisierte und skalierbare Plattform, die auf Lucene aufbaut.

Aufbau

Sitecore wird mit einer Reihe von vorkonfigurierten Standardindizes ausgeliefert, die Sie erweitern oder eigene definieren können. sitecore_master_index & sitecore_web_index sind für die Site-Suche am interessantesten. Dies sind die vordefinierten Indizes für alle Ihre Sitecore-Elemente in der Baumstruktur Ihrer Master- und Web-Datenbanken. Sie sind so konfiguriert, dass sie alle Standardfelder eines Sitecore-Elements speichern, die in allen Vorlagen verwendet werden.

Sie können diese Konfiguration des Standard- <Your Site>\App_Config\Include\Sitecore.ContentSearch.Lucene.Index.Web.config an folgender Stelle <Your Site>\App_Config\Include\Sitecore.ContentSearch.Lucene.Index.Web.config : <Your Site>\App_Config\Include\Sitecore.ContentSearch.Lucene.Index.Web.config

Die wichtigsten Bereiche der Konfiguration eines Indexes sind:

  • Die Feldkonfiguration - Welche Felder sollten im Index gespeichert werden und wie diese gespeichert werden sollen.
  • Die Strategie - wie und wann sollte der Index aktualisiert werden.
  • Der Crawler - Der Ort, an dem der Index seine Sitecore-Daten abrufen kann

Feldkonfiguration

In der sitecore_web_index Konfiguration können Sie die folgende Referenz sehen: <configuration ref="contentSearch/indexConfigurations/defaultLuceneIndexConfiguration" /> . Dies bezieht sich auf eine freigegebene Indexkonfigurationsdatei, die Sie hier finden: <Your Site>\App_Config\Include\Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config . Hier können Sie alle Felder sehen, die in der Standardkonfiguration enthalten sind.

Grundsätzlich gibt es zwei Möglichkeiten, ein Feld zu definieren: Entweder wird das Feld direkt aus einem Sitecore-Elementfeld bezogen oder es ist ein berechnetes Feld. In einem berechneten Feld können Sie Code schreiben, um Berechnungen durchzuführen und das Ergebnis im Feld zu speichern. Dieser Code wird ausgeführt, wenn der Index erstellt / aktualisiert wird, nicht wenn der Index abgefragt wird. Dies ist besonders nützlich, wenn das Feld aggregierte Daten wie Zählungen usw. speichern muss.

Innerhalb des <fieldMap> -Elements werden die Elemente <fieldNames hint="raw:AddFieldByFieldName"> & <fields hint="raw:AddComputedIndexField"> , die die direkt bezogenen Felder bzw. die berechneten Felder enthalten.

Strategie

Die Strategie Ihres Index bestimmt, wann Ihr Index aktualisiert wird. Es gibt folgende Optionen zur Auswahl:

  • OnPublishEndAsynchronousStrategy (onPublishEndAsync) - Wenn ein Element veröffentlicht wird, wird der Index asynchron aktualisiert.
  • SynchronousStrategy (syncMaster) - Wenn ein Element gespeichert wird, wird der Index sofort und synchron aktualisiert.
  • IntervalAsynchronousStrategy (IntervallAsyncCore / IntervallAsyncMaster) - Regelmäßig nach Elementaktualisierungen suchen und den Index asynchron aktualisieren
  • ManualStrategy - Keine automatischen Indexaktualisierungen . Indizes werden nur manuell (über das Bedienfeld oder programmgesteuert) aktualisiert.
  • RebuildAfterFullPublishStrategy (rebuildAfterFullPublish) - Nach einer Veröffentlichung wird der Index vollständig neu erstellt
  • RemoteRebuildStrategy (remoteRebuild) - Diese Strategie gilt für mehrere Instanzen von Sitecore. Wenn beispielsweise vom Content Management Server eine Neuerstellung angefordert wird, abonnieren die Remote Content Delivery Server dieses Ereignis und erstellen ihre eigenen Indizes.

Standardmäßig ist der Masterindex als syncMaster konfiguriert. Dies liegt daran, dass Sie im Experience Editor beim Speichern von Elementen und beim Rendern auf der Seite die Ergebnisse eines Index anzeigen und Änderungen an Elementen sofort in den Ergebnissen anzeigen möchten. Der Webindex ist als 'onPublishEndAsync' konfiguriert. Dies liegt daran, dass die Indizes Ihrer Webdatenbank nur aktualisiert werden müssen, wenn Elemente aus der Master-Datenbank im Web veröffentlicht werden.

Sie können auch mehrere Strategien kombinieren. Wenn Sie beispielsweise separate Sitecore-Instanzen für Content Management (CM) und Content Delivery (CD) haben, ist es sinnvoll, onPublishEndAsync mit remoteRebuild zu kombinieren, so dass CD-Indizes aktualisiert werden, wenn Elemente veröffentlicht werden, und wenn sie neu erstellt werden Ein Benutzer löst eine Neuerstellung über das Bedienfeld des CM-Servers aus.

Sie können Ihre Strategie mithilfe der folgenden Konfiguration auswählen:

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

Der Crawler

Auf diese Weise können Sie den Ort der Sitecore-Daten angeben, die Sie indexieren möchten. Der Webindex hat die folgende Standardkonfiguration:

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

Die zwei wichtigen Bits sind die Elemente <Database> und <Root> . Mit dem <Root> -Element können Sie die Startposition in Ihrer Sitecore-Struktur angeben, die der Index indexieren soll. In Wirklichkeit haben Sie wahrscheinlich unter dem Inhaltsknoten einen "Home" -Knoten, auf den Sie darauf verweisen würden, sodass er nur Ihre tatsächlichen Inhalte / Seiten indiziert und nicht Ihre Vorlagen usw.

Erstellen Sie einen Eingangsfilter für die Suche

Der Eingangsfilter wird angewendet, wenn ein Element zum Suchindex hinzugefügt wird, und es kann angegeben werden, ob das Element im Index enthalten ist oder nicht.

Beispiele für den Inbound-Filter - Verwenden Sie keine Standardwerte und frühere Versionen des Elements im Index.

Eingehende Filter werden in der Konfiguration festgelegt:

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

Code-Implementierung:

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

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

Weitere Beispiele und Informationen finden Sie unter http://www.sitecore.net/learn/blogs/technical-blogs/sitecore-7-development-team/posts/2013/04/sitecore-7-inbound-and-outbound- filter-pipelines.aspx

Erstellen Sie einen Ausgangsfilter für die Suche

Ausgehende Filter können verwendet werden, um die Suchergebnisse zu filtern.

Ein Beispiel für die Verwendung ausgehender Filter ist das Entfernen von Elementen, auf die der Benutzer keinen Zugriff hat, aus den Suchergebnissen.

Ausgangsfilter werden in der Konfiguration festgelegt:

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

Beispiel für die Implementierung eines Outbound-Filters:

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

Weitere Beispiele und Informationen finden Sie unter http://www.sitecore.net/learn/blogs/technical-blogs/sitecore-7-development-team/posts/2013/04/sitecore-7-inbound-and-outbound- filter-pipelines.aspx

Löschen Sie alle vorherigen Versionen des Elements im Index, wenn Sie eine neue Version hinzufügen

Standardmäßig fügt Sitecore alle Versionen des Elements zum Sitecore_master_index hinzu. Der Nachteil davon ist, dass, wenn Benutzer Workflows verwenden und viele Versionen hinzufügen, alle zu den Suchergebnissen im Inhaltseditor hinzugefügt werden.

Aufbau:

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

Handler-Implementierung

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow