2012-08-09 12 views
6

Estaba jugando con Custom Search Indexing Handlers para SDL Tridion 2011 (GA). Obtuve algo que funciona, usando el very helpful information provided by Arjen, sin embargo, no estoy seguro si mi ejecución es la mejor opción.Controlador de índice de búsqueda de Tridion personalizado: ¿personalizado frente a campo estándar para la URL de la página?

El requisito es poder buscar páginas en el CMS por la URL (por ejemplo, www.example.com/news/index.html). Para hacer esto, he creado una clase usando la interfaz ISearchIndexingHandler (código a continuación). Estoy indexando la url en el campo ContentText del artículo, sin embargo, no estoy seguro si esto normalmente contendría algo más para una página (creo que una página solo tiene metadatos, por lo que debería estar bien). La ventaja de usar esto en un campo personalizado es que puedo simplemente escribir la URL en el cuadro de búsqueda sin tener que usar <url> EN < nombre de campo > o algo así.

Así que mi pregunta es, ¿hay alguna razón para no usar ContentText para páginas, y hay alguna ventaja en el uso de un campo personalizado? Además, las bonificaciones se otorgan a cualquier persona con buenas ideas sobre cómo manejar BluePrinting (si creo una página en una publicación principal, también quiero que las URL locales se indexen en las publicaciones secundarias) y el caso en que se altera una ruta de grupo de Estructura (Creo que de alguna manera puedo desencadenar un nuevo índice de elementos de páginas secundarias desde mi controlador de indexación).

El código:

using System; 
using Tridion.ContentManager.Search; 
using Tridion.ContentManager.Search.Indexing.Handling; 
using Tridion.ContentManager.Search.Indexing.Service; 
using Tridion.ContentManager.Search.Indexing; 
using Tridion.ContentManager.Search.Fields; 

namespace ExampleSearchIndexHandler 
{ 
    public class PageUrlHandler : ISearchIndexingHandler 
    { 
     public void Configure(SearchIndexingHandlerSettings settings) 
     {    
     } 

     public void ExtractIndexFields(IdentifiableObjectData subjectData, Item item, CoreServiceProxy serviceProxy) 
     { 
      PageData data = subjectData as PageData; 
      if (data != null) 
      { 
       PublishLocationInfo info = data.LocationInfo as PublishLocationInfo; 
       string url = GetUrlPrefix(data) + info.PublishLocationUrl; 
       item.ContentText = url; 
      } 
     } 

     private string GetUrlPrefix(PageData page) 
     { 
      //hardcoded for now, but will be read from publication metadata 
      return "www.example.com"; 
     } 
    } 
} 

Respuesta

5

puede almacenar el URL en la propiedad ContextText. El campo Thies se usa para indexar datos de contenido de Plantilla.

Tridion no indexa elemento (s) compartido (s) de la publicación secundaria.

La indexación se activa en la modificación de elementos (crear, actualizar, eliminar, localizar y deslocalizar). O puede usar la herramienta de reindexación para reindexar su artículo. pero no hay forma de indexar elementos compartidos en la publicación secundaria.

3

No creo que pueda incluir el prefijo de URL en su consulta de búsqueda como elemento indexado. Debido a que los elementos compartidos no están indexados, probablemente indexará la página desde la capa Estructura del sitio web, que nunca se publicará.

Cuando se mueve un grupo de estructuras, debe crear un controlador de eventos que active la re indización de todas las páginas secundarias utilizando un método protegido de la API de TOM.NET. Este método no forma parte de la API pública, por lo que publicar el código para esa solución probablemente me declare una persona non grata con R & D :)

Antes de volver a indexar cualquier cosa, debe almacenar la URL de ubicación de publicación original de el Grupo de estructura en la propiedad TcmEventArgs.ContextVariables, por lo que puede verificar si es necesaria o no una acción de indexación.

+0

Un buen punto acerca de solo desencadenar el re-índice si un SG publicó la URL ha cambiado, esto podría evitar una re-indexación pesada para sitios grandes. Como los SG no están versionados, creo que la única manera de hacerlo es en el sistema de eventos como dijiste. – Will

+0

Sí, su edición fue correcta. Me refiero a Structure Group en lugar de Page. –

Cuestiones relacionadas