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";
}
}
}
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
Sí, su edición fue correcta. Me refiero a Structure Group en lugar de Page. –