2012-08-09 10 views
6

Stavo giocando con gli indici di ricerca personalizzati per SDL Tridion 2011 (GA). Ho ottenuto qualcosa lavorando, usando il very helpful information provided by Arjen, tuttavia non sono sicuro che la mia esecuzione sia l'opzione migliore.Gestore dell'indice di ricerca Tridion personalizzato: campo personalizzato vs standard per l'URL della pagina?

L'esigenza è di essere in grado di cercare le pagine nel CMS tramite url (ad es. Www.example.com/news/index.html). Per fare questo ho creato una classe usando l'interfaccia ISearchIndexingHandler (codice sotto). Sto indicizzando l'url nel campo ContentText dell'articolo, tuttavia non sono sicuro che questo normalmente contenga qualcos'altro per una pagina (penso che una pagina contenga solo metadati, quindi dovrebbe essere OK). Il vantaggio di utilizzare questo su un campo personalizzato è che posso semplicemente digitare l'url nella casella di ricerca senza dover usare <url> nel < nome di campo > o qualcosa del genere.

Quindi la mia domanda è, c'è qualche ragione per non usare ContentText per Pages, e c'è qualche vantaggio nell'usare un campo personalizzato? Anche i contrassegni bonus vanno a chiunque abbia buone idee su come gestire BluePrinting (se creo una pagina in una pubblicazione principale, voglio che anche gli URL locali vengano indicizzati nelle pubblicazioni secondarie) e il caso in cui un percorso del gruppo Struttura è alterato (Credo di poter in qualche modo innescare un reindicizzazione degli elementi della pagina figlio dal mio gestore di indicizzazione).

Il codice:

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

risposta

5

è possibile memorizzare l'URL nella ContextText proprietà. Il campo Thies viene utilizzato per indicizzare i dati del contenuto del modello.

Tridion non indicizza gli articoli condivisi della pubblicazione secondaria.

L'indicizzazione viene attivata in Modifica elemento (crea, aggiorna, elimina, localizza e disloca). Oppure puoi usare lo strumento di reindicizzazione per reindirizzare l'elemento. ma non è possibile indicizzare gli elementi condivisi nella pubblicazione secondaria.

3

Non penso che sia possibile includere il prefisso URL nella query di ricerca come elemento indicizzato. Poiché gli elementi condivisi non sono indicizzati, probabilmente indicizzerai la pagina dal livello Struttura sito Web, che non verrà mai pubblicata.

Quando un gruppo di strutture viene spostato, è necessario creare un gestore di eventi che attiva la reindicizzazione di tutte le pagine figlio utilizzando un metodo protetto dell'API TOM.NET. Questo metodo non fa parte dell'API pubblica, quindi pubblicare il codice per tale soluzione probabilmente mi dichiarerebbe un utente non grata con R & D :)

Prima di reindicizzare qualcosa, è necessario memorizzare l'URL di posizione di pubblicazione originale di il gruppo struttura nella proprietà TcmEventArgs.ContextVariables, in modo da poter verificare se è necessaria un'azione di reindicizzazione.

+0

Un buon punto a proposito dell'attivazione del reindicizzazione solo se è stato modificato un URL di pubblicazione SG: questo potrebbe evitare un pesante reindicizzazione per siti di grandi dimensioni. Siccome gli SG non sono versionati, immagino che l'unico modo per farlo sia nel sistema degli eventi come hai detto tu. – Will

+0

Sì, la modifica era corretta. Ho inteso il gruppo di strutture al posto di Page. –

Problemi correlati