Szukaj…


Uwagi

Wyszukiwanie Sitecore jest oparte na Lucene, zapewniając możliwość tworzenia bardzo szybkich funkcji wyszukiwania dla Twojej witryny. Zamiast zapytania do scentralizowanej bazy danych (takiej jak SQL DB Sitecore), odpytuje ona pliki indeksu Lucene, które są przechowywane w fizycznym systemie plików serwera WWW. Sitecore zapewnia warstwę abstrakcji w interfejsie API Lucene.NET, w tym dostawcę LINQ, dzięki czemu pisanie zapytań Lucene jest prostym i znanym procesem dla programistów .NET. Sitecore jest dostarczany ze skonfigurowanymi standardowymi indeksami, które możesz rozszerzyć lub zdefiniować własne. Możesz także zdecydować się na użycie SOLR; scentralizowana i skalowalna platforma zbudowana na bazie Lucene.

Konfiguracja

Sitecore jest dostarczany ze wstępnie skonfigurowanym zestawem standardowych indeksów, które można rozszerzyć lub zdefiniować własne. Spośród wstępnie skonfigurowanych witryn sitecore_master_index i sitecore_web_index są najbardziej interesujące przy wyszukiwaniu w witrynie. Są to predefiniowane indeksy dla wszystkich elementów Sitecore odpowiednio w drzewie głównych i internetowych baz danych i są skonfigurowane do przechowywania wszystkich standardowych pól elementu Sitecore, które będą wspólne dla wszystkich szablonów.

Możesz zobaczyć tę konfigurację standardowego indeksu internetowego w tej lokalizacji: <Your Site>\App_Config\Include\Sitecore.ContentSearch.Lucene.Index.Web.config

Główne obszary ważności konfiguracji indeksu to:

  • Konfiguracja pola - Jakie pola powinny być przechowywane w indeksie i jak powinny być przechowywane.
  • Strategia - jak i kiedy należy aktualizować indeks.
  • Robot - lokalizacja, w której indeks może uzyskać dane Sitecore

Konfiguracja w terenie

Przeglądając konfigurację sitecore_web_index , możesz zobaczyć następujące odniesienie: <configuration ref="contentSearch/indexConfigurations/defaultLuceneIndexConfiguration" /> . Odnosi się to do udostępnionego pliku konfiguracyjnego indeksu znajdującego się tutaj: <Your Site>\App_Config\Include\Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config . Tutaj możesz zobaczyć wszystkie pola zawarte w standardowej konfiguracji.

Istnieją dwa sposoby zdefiniowania pola: albo pole jest pozyskiwane bezpośrednio z pola elementu Sitecore, albo jest polem obliczonym. Pole obliczone pozwala napisać kod do wykonania obliczeń i zapisać wynik w polu. Ten kod zostanie wykonany, gdy indeks zostanie zbudowany / zaktualizowany, a nie podczas zapytania o indeks. Jest to szczególnie przydatne, jeśli pole musi przechowywać zagregowane dane, takie jak liczby itp.

W <fieldMap> zobaczysz elementy <fieldNames hint="raw:AddFieldByFieldName"> & <fields hint="raw:AddComputedIndexField"> , które zawierają odpowiednio pola bezpośrednio i pola obliczone.

Strategia

Strategia indeksu określa, kiedy indeks jest aktualizowany. Do wyboru są następujące opcje:

  • OnPublishEndAsynchronousStrategy (onPublishEndAsync) - Po opublikowaniu elementu indeks zostanie zaktualizowany asynchronicznie.
  • SynchronousStrategy (syncMaster) - Po zapisaniu elementu indeks zostanie natychmiast zaktualizowany i synchronicznie.
  • IntervalAsynchronousStrategy (przedziałAsyncCore / przedziałAsyncMaster) - Okresowo sprawdzaj dostępność aktualizacji pozycji i aktualizuj indeks asynchronicznie
  • ManualStrategy - Brak automatycznych aktualizacji indeksu. Indeksy będą aktualizowane tylko ręcznie (za pomocą panelu sterowania lub programowo)
  • RebuildAfterFullPublishStrategy (rebuildAfterFullPublish) - Po opublikowaniu indeks zostanie w pełni przebudowany
  • RemoteRebuildStrategy (remoteRebuild) - Ta strategia dotyczy wielu instancji Sitecore. Na przykład, jeśli serwer zarządzania treścią wymaga przebudowy, wówczas zdalne serwery dostarczania treści subskrybują to zdarzenie i odbudują własne indeksy.

Domyślnie indeks główny jest skonfigurowany jako syncMaster . Wynika to z faktu, że jeśli w edytorze doświadczeń zapisujesz elementy, a renderowanie na stronie wyświetla wyniki indeksu, będziesz chciał zobaczyć zmiany wprowadzone w elementach od razu w wynikach. Indeks internetowy jest skonfigurowany jako „onPublishEndAsync”, ponieważ indeksy internetowej bazy danych wymagają aktualizacji tylko wtedy, gdy elementy są publikowane z głównej bazy danych w Internecie.

Możesz także łączyć wiele strategii. Na przykład, jeśli masz oddzielne instancje Sitecore do zarządzania treścią (CM) i dostarczania treści (CD), warto połączyć onPublishEndAsync ze remoteRebuild , aby indeksy CD były aktualizowane podczas publikowania elementów, a także odbudowywane, gdy użytkownik uruchamia przebudowę z panelu sterowania serwera CM.

Możesz wybrać strategię za pomocą następującej konfiguracji:

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

Crawler

Pozwala to określić lokalizację danych Sitecore, które chcesz indeksować. Indeks internetowy ma następującą domyślną konfigurację:

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

Dwa ważne bity to elementy <Database> i <Root> . Element <Root> pozwala określić pozycję początkową w drzewie Sitecore, którą indeks powinien indeksować. W rzeczywistości pod węzłem treści prawdopodobnie znajduje się węzeł „główny”, na który wskazywałbyś, aby indeksował tylko rzeczywistą treść / strony, a nie szablony itp.

Utwórz filtr danych przychodzących dla wyszukiwania

Filtr danych przychodzących jest stosowany, gdy element jest dodawany do indeksu wyszukiwania i pozwala określić, czy element ma być uwzględniony w indeksie, czy nie.

Przykłady, w których można zastosować filtr danych przychodzących - nie uwzględniaj standardowych wartości i poprzednich wersji elementu w indeksie.

Filtry przychodzące są ustawiane w konfiguracji:

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

Implementacja kodu:

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

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

Więcej przykładów i informacji można znaleźć na stronie http://www.sitecore.net/learn/blogs/technical-blogs/sitecore-7-development-team/posts/2013/04/sitecore-7-inbound-and-outbound- filter-pipelines.aspx

Utwórz filtr wychodzący dla wyszukiwania

Filtr wychodzący może służyć do filtrowania wyników wyszukiwania.

Jednym z przykładów użycia filtru wychodzącego jest usuwanie elementów, do których użytkownik nie ma dostępu z wyników wyszukiwania.

Filtry wychodzące są ustawiane w konfiguracji:

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

Przykład implementacji filtru wychodzącego:

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

Więcej przykładów i informacji można znaleźć na stronie http://www.sitecore.net/learn/blogs/technical-blogs/sitecore-7-development-team/posts/2013/04/sitecore-7-inbound-and-outbound- filter-pipelines.aspx

Podczas dodawania nowej wersji usuń wszystkie poprzednie wersje elementu z indeksu

Domyślnie Sitecore dodaje wszystkie wersje elementu do sitecore_master_index. Wadą tego jest to, że jeśli użytkownicy używają przepływów pracy i dodają wiele wersji, wszystkie zostaną dodane do wyników wyszukiwania w edytorze treści.

Konfiguracja:

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

Implementacja modułu obsługi

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow