Buscar..


Observaciones

La búsqueda de Sitecore se construye sobre Lucene, lo que brinda la capacidad de crear capacidades de búsqueda muy rápidas para su sitio. En lugar de consultar una base de datos centralizada (como la base de datos SQL de Sitecore), consulta los archivos de índice de Lucene que se almacenan en el sistema de archivos físico del servidor web. Sitecore proporciona una capa de abstracción sobre la API de Lucene.NET que incluye un proveedor LINQ que hace que las consultas de Lucene sean un proceso simple y familiar para los desarrolladores de .NET. Sitecore se envía con algunos índices estándar configurados que puede ampliar o definir los suyos. También puede optar por utilizar SOLR; una plataforma centralizada y escalable construida sobre Lucene.

Configuración

Sitecore se envía con un conjunto de índices estándar preconfigurados que puede ampliar, o puede definir el suyo propio. De los preconfigurados, sitecore_master_index y sitecore_web_index son los más interesantes para la búsqueda de su sitio. Estos son los índices predefinidos para todos sus elementos de Sitecore en el árbol de sus bases de datos maestras y web, respectivamente, y están configurados para almacenar todos los campos estándar de un elemento de Sitecore que serán comunes entre todas las plantillas.

Puede ver esta configuración del índice web estándar en esta ubicación: <Your Site>\App_Config\Include\Sitecore.ContentSearch.Lucene.Index.Web.config

Las principales áreas de importancia de la configuración de un índice son:

  • Configuración de campo : qué campos deben almacenarse en el índice y cómo deben almacenarse.
  • La estrategia : cómo y cuándo debe actualizarse el índice.
  • El rastreador : la ubicación donde el índice puede obtener sus datos de Sitecore

Configuración de campo

Mirando en la configuración de sitecore_web_index , puede ver la siguiente referencia: <configuration ref="contentSearch/indexConfigurations/defaultLuceneIndexConfiguration" /> . Esto se refiere a un archivo de configuración de índice compartido que se encuentra aquí: <Your Site>\App_Config\Include\Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config . Aquí puede ver todos los campos que se incluyen en la configuración estándar.

Básicamente, hay dos formas de definir un campo: el campo se obtiene directamente de un campo de elemento de Sitecore o es un campo computado. Un campo computado le permite escribir algo de código para hacer algunos cálculos y almacenar el resultado en el campo. Este código se ejecutará cuando el índice se construya / actualice, no cuando se consulte el índice. Esto es particularmente útil si el campo necesita almacenar datos agregados, como conteos, etc.

Dentro del elemento <fieldMap> verá los elementos <fieldNames hint="raw:AddFieldByFieldName"> y <fields hint="raw:AddComputedIndexField"> , que contienen los campos de fuente directa y los campos calculados respectivamente.

Estrategia

La estrategia de su índice determina cuándo se actualiza su índice. Hay las siguientes opciones para elegir:

  • OnPublishEndAsynchronousStrategy (onPublishEndAsync) : cuando se publica un elemento, el índice se actualizará de forma asíncrona.
  • SynchronousStrategy (syncMaster) : cuando se guarda un elemento, el índice se actualizará de forma instantánea y sincrónica.
  • IntervalAsynchronousStrategy (intervalAsyncCore / intervalAsyncMaster) : comprueba periódicamente las actualizaciones de elementos y actualiza el índice de forma asíncrona
  • ManualStrategy - No hay actualizaciones automáticas de índice Los índices solo se actualizarán manualmente (a través del panel de control, o mediante programación)
  • RebuildAfterFullPublishStrategy (rebuildAfterFullPublish) - Después de una publicación, el índice se reconstruirá por completo
  • RemoteRebuildStrategy (remoteRebuild) : esta estrategia es para varias instancias de Sitecore. Por ejemplo, si se requiere una reconstrucción desde el servidor de administración de contenido, entonces los servidores de entrega de contenido remotos se suscribirán a este evento y reconstruirán sus propios índices.

De forma predeterminada, el índice maestro está configurado como syncMaster . Esto se debe a que si está en el editor de experiencia al guardar elementos y al mostrar en la página los resultados de un índice, querrá ver los cambios que haya realizado en los elementos inmediatamente en los resultados. El índice web se configura como 'onPublishEndAsync', esto se debe a que los índices de su base de datos web solo necesitan actualizarse cuando los elementos se publican desde la base de datos maestra a la web.

También puedes combinar múltiples estrategias. Por ejemplo, si tiene instancias de Sitecore separadas para la administración de contenido (CM) y la entrega de contenido (CD), tendría sentido combinar onPublishEndAsync con remoteRebuild , de modo que los índices de CD se actualicen cuando se publiquen los elementos y se reconstruyan cuando un usuario activa una reconstrucción desde el panel de control del servidor CM.

Puedes elegir tu estrategia usando la siguiente configuración:

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

El rastreador

Esto le permite especificar la ubicación de los datos de Sitecore que desea indexar. El índice web tiene la siguiente configuración por defecto:

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

Los dos bits importantes son los elementos <Database> y <Root> . El elemento <Root> permite especificar la posición inicial en su árbol de Sitecore que el índice debe indexar. En realidad, es probable que tengas un nodo 'Inicio' debajo del nodo de contenido al que apuntarías para que solo indexe el contenido real / las páginas en lugar de tus plantillas, etc.

Crear un filtro de entrada para la búsqueda.

El filtro de entrada se aplica cuando el elemento se agrega al índice de búsqueda y permite especificar si el elemento se incluye en el índice o no.

Ejemplos de uso del filtro de entrada: no incluyen los valores estándar y las versiones anteriores del elemento en el índice.

Los filtros de entrada se establecen en la configuración:

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

Implementación de código:

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

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

Se pueden encontrar más ejemplos e información en http://www.sitecore.net/learn/blogs/technical-blogs/sitecore-7-development-team/posts/2013/04/sitecore-7-inbound-and-outbound- filter-pipelines.aspx

Crear un filtro de salida para la búsqueda.

El filtro de salida se puede utilizar para filtrar los resultados de búsqueda.

Uno de los ejemplos de uso del filtro de salida es eliminar elementos a los que el usuario no tiene acceso desde los resultados de búsqueda.

Los filtros de salida se establecen en la configuración:

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

Ejemplo de implementación de filtro de salida:

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

Se pueden encontrar más ejemplos e información en http://www.sitecore.net/learn/blogs/technical-blogs/sitecore-7-development-team/posts/2013/04/sitecore-7-inbound-and-outbound- filter-pipelines.aspx

Elimine todas las versiones anteriores del elemento en el índice al agregar una nueva versión

Por defecto, Sitecore agrega todas las versiones del elemento al sitecore_master_index. El inconveniente es que si los usuarios utilizan flujos de trabajo y agregan muchas versiones, todos ellos se agregarán a los resultados de búsqueda en el editor de contenido.

Configuración:

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

Implementacion de manejador

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow