Frage Angepasster Tridion-Suchindex-Handler: Benutzerdefiniert im Vergleich zum Standardfeld für die Seiten-URL?


Ich habe mit benutzerdefinierten Suchindizierungshandlern für SDL Tridion 2011 (GA) herumgespielt. Ich habe etwas funktioniert, mit dem sehr hilfreiche Informationen von Arjenaber ich bin mir nicht sicher, ob meine Ausführung die beste Option ist.

Voraussetzung ist, dass nach Seiten im CMS nach URL gesucht werden kann (zB www.example.com/news/index.html). Um dies zu tun, habe ich eine Klasse mit der erstellt ISearchIndexingHandler Schnittstelle (Code unten). Ich indexiere die URL im ContentText-Feld des Elements, aber ich bin mir nicht sicher, ob dies normalerweise etwas anderes für eine Seite enthalten würde (ich denke, eine Seite hat nur Metadaten, also sollte das OK sein). Der Vorteil, dies über ein benutzerdefiniertes Feld zu verwenden, ist, dass ich einfach die URL in das Suchfeld eingeben kann, ohne <url> IN <fieldname> oder etwas ähnliches zu verwenden.

Meine Frage ist also, gibt es einen Grund, ContentText nicht für Pages zu verwenden, und gibt es einen Vorteil bei der Verwendung eines benutzerdefinierten Feldes? Auch Bonuspunkte kommen an alle, die gute Ideen zum Umgang mit BluePrinting haben (wenn ich eine Seite in einer übergeordneten Publikation erstelle, möchte ich, dass die lokalen URLs auch in den untergeordneten Publikationen indiziert werden) und der Fall, dass ein Strukturgruppenpfad geändert wird (Ich vermute, dass ich irgendwie einen Neu-Index von untergeordneten Seitenelementen in meinem Indizierungshandler auslösen kann).

Der Code:

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";
        }
    }
}

6
2017-08-09 10:29


Ursprung


Antworten:


Sie können die URL in der ContextText-Eigenschaft speichern. Dieses Feld dient zum Indexieren von Vorlageninhaltsdaten.

Tridion indiziert keine freigegebenen Elemente der untergeordneten Publikation.

Die Indexierung wird beim Ändern des Elements (Erstellen, Aktualisieren, Löschen, Lokalisieren und Entlo- kalisieren) ausgelöst. Oder Sie können das Reindexing-Tool verwenden, um Ihren Artikel neu zu indizieren. Es gibt jedoch keine Möglichkeit, freigegebene Elemente in untergeordneten Publikationen zu indizieren.


5
2017-08-09 11:19



Ich glaube nicht, dass Sie das URL-Präfix in Ihre Suchanfrage als indizierten Artikel aufnehmen können. Da freigegebene Elemente nicht indiziert sind, indexieren Sie die Seite wahrscheinlich aus der Ebene der Website-Struktur, die nie veröffentlicht wird.

Wenn eine Strukturgruppe verschoben wird, müssen Sie einen Ereignishandler erstellen, der die erneute Indizierung aller untergeordneten Seiten mithilfe einer geschützten Methode der TOM.NET-API auslöst. Diese Methode ist nicht Teil der öffentlichen API, daher würde die Veröffentlichung des Codes für diese Lösung mich wahrscheinlich zu einer persona non grata mit R & D erklären :)

Bevor Sie etwas neu indizieren, sollten Sie die ursprüngliche Veröffentlichungslokalisierungs-URL der Strukturgruppe in der TcmEventArgs.ContextVariables Eigenschaft, sodass Sie überprüfen können, ob eine Neuindizierung erforderlich ist.


3
2017-08-10 07:51