我有一个Lucene索引,其中一个字段映射到Sitecore的富文本字段。
由于此字段值包含共享模板的大多数项目的html内容,因此我希望在获取项目的字段值时返回html内容。但是,我注意到返回的值被剥夺了所有html标签。
我尝试将INDEXTYPE更改为“UNTOKENTIZED”。然而,这并没有解决问题。我知道Lucene这样做是为了允许基于该字段进行搜索。但这不是我的要求,我希望这种行为被覆盖。
答案 0 :(得分:4)
这是因为RichTextFieldReader
和html
字段分配了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>