Ich spielte mit benutzerdefinierten Suchindizierungshandlern für SDL Tridion 2011 (GA) herum. Ich habe etwas funktioniert, mit der very helpful information provided by Arjen, aber ich bin mir nicht sicher, ob meine Ausführung die beste Option ist.Customized Tridion Search Index Handler: Benutzerdefinierte vs Standard-Feld für die Seite URL?
Die Anforderung besteht darin, nach Seiten im CMS nach URL suchen zu können (zB www.example.com/news/index.html). Um dies zu tun, habe ich eine Klasse erstellt mit der 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 der Verwendung dieses über ein benutzerdefiniertes Feld ist, dass ich einfach die URL in das Suchfeld eingeben kann, ohne <URL> IN <Feldname> oder etwas ähnliches zu verwenden.
Also meine Frage ist, gibt es keinen Grund, ContentText für Pages nicht zu verwenden, und gibt es einen Vorteil bei der Verwendung eines benutzerdefinierten Felds? 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";
}
}
}
Guter Punkt über das Auslösen des Re-Index nur, wenn sich eine SG-Veröffentlichungs-URL geändert hat - dies könnte eine starke Neuindizierung für große Sites vermeiden. Da SGs nicht versioniert sind, ist der einzige Weg, dies zu tun, das Ereignissystem, wie Sie es gesagt haben. – Will
Ja, deine Bearbeitung war korrekt. Ich habe Strukturgruppe statt Seite gemeint. –