2016-05-24 5 views
4

Ich habe einen Lucene-Index, in dem eines der Felder Sitecore Rich-Text-Feld zugeordnet ist.Lucene Index Feld Wert ist von allen HTML-Tags gelöscht

Da dieser Feldwert HTML-Inhalt für die meisten Elemente enthält, die die Vorlage freigeben, erwartete ich, dass HTML-Inhalt beim Abrufen des Feldwerts des Elements zurückgegeben wird. Ich bemerkte jedoch, dass der zurückgegebene Wert von allen HTML-Tags entfernt wurde.

Ich versuchte, den INDEXTYPE zu "UNTOKENTIZED" zu ändern. Aber das hat das Problem nicht gelöst. Ich verstehe, dass Lucene dies ermöglicht, um auf diesem Feld zu suchen. Aber das ist in meinem Fall keine Voraussetzung und ich möchte, dass dieses Verhalten außer Kraft gesetzt wird.

+0

Welche Version von Sitecore in Ihrem Lucene Index abgelegt registrieren verwenden Sie? – Gatogordo

Antwort

4

Es geschieht, weil es eine RichTextFieldReader den html und rich text Felder zugeordnet:

<fieldReader 
    fieldTypeName="html|rich text"          
    fieldNameFormat="{0}" 
    fieldReaderType="Sitecore.ContentSearch.FieldReaders.RichTextFieldReader, Sitecore.ContentSearch" /> 

In Sitecore 8.1 es in Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config definiert ist.

Es löscht alle Tags mit HtmlField.GetPlainText().

Sie können versuchen, einen anderen Abschnitt auf dem gleichen Niveau wie <mapFieldByTypeName hint="raw:AddFieldReaderByFieldTypeName"> Abschnitt hinzuzufügen und verwenden Sie so etwas wie:

<mapFieldByFieldName hint="AddFieldReaderByFieldName"> 
    <fieldReader 
     fieldName="yourFieldName" 
     fieldReaderType="Sitecore.ContentSearch.FieldReaders.DefaultFieldReader, Sitecore.ContentSearch" /> 

Mapping von fieldName hat höhere Priorität als Abbildung von Feldtyp, so wird es fieldRendered angegeben verwenden für Ihre Feld, anstatt das für den Feldtyp angegebene Feld zu verwenden.

+0

Ich habe das gerade versucht ... aber es gibt mir einen Objekt Referenzfehler nach dem Öffnen des Indexing Managers. Ich änderte auch den Feldwiedergabetyp ohne Erfolg in einen folgenden: Sairaj

+0

Sind Sie Bist du sicher, dass du keinen Tippfehler hast und du genau kopiert hast, was ich eingefügt habe? 'hinweis =" AddFieldReaderByFieldName "' und 'fieldReader fieldName =" ... "'? Was ist der Stack-Trace der Objektreferenz? –

0

Sie sollten in der Lage sein, ein berechnetes Indexfeld zu erstellen, und dies sollte den HTML-Code korrekt im Index speichern.

public class TileHtml : IComputedIndexField 
{ 
    public object ComputeFieldValue(IIndexable indexable) 
    { 
     Item indexedContent = indexable as SitecoreIndexableItem; 

     if (indexedContent != null && indexedContent.Fields[ITileConstants.TileHtmlFieldName] != null && !string.IsNullOrWhiteSpace(indexedContent.Fields[ITileConstants.TileHtmlFieldName].Value)) 
     { 
      return indexedContent.Fields[ITileConstants.TileHtmlFieldName].Value; 
     } 

     return null; 
    } 

    public string FieldName { get; set; } 
    public string ReturnType { get; set; } 
} 

Sie können dann die

<fields hint="raw:AddComputedIndexField"> 
<field fieldName="TileHtml" storageType="YES" indexType="TOKENIZED">Namespace.TileHtml, Assembly</field>