Lucene索引字段值被剥离所有html标记

时间:2016-05-24 12:52:23

标签: lucene sitecore

我有一个Lucene索引,其中一个字段映射到Sitecore的富文本字段。

由于此字段值包含共享模板的大多数项目的html内容,因此我希望在获取项目的字段值时返回html内容。但是,我注意到返回的值被剥夺了所有html标签。

我尝试将INDEXTYPE更改为“UNTOKENTIZED”。然而,这并没有解决问题。我知道Lucene这样做是为了允许基于该字段进行搜索。但这不是我的要求,我希望这种行为被覆盖。

2 个答案:

答案 0 :(得分:4)

这是因为RichTextFieldReaderhtml字段分配了rich text

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

在Sitecore 8.1中,它在Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config中定义。

使用HtmlField.GetPlainText()删除所有代码。

您可以尝试在与<mapFieldByTypeName hint="raw:AddFieldReaderByFieldTypeName">部分相同的级别添加其他部分,并使用以下内容:

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

fieldName映射的优先级高于按字段类型映射的优先级,因此它将使用为您的字段指定的fieldRendered,而不是使用为您的字段类型指定的值。{/ p>

答案 1 :(得分:0)

您应该能够创建计算索引字段,这应该在索引中正确保存HTML。

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

然后,您可以在Lucene索引中注册该字段

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