Sitecore 7 Lucene:从计算字段中剥离HTML

时间:2014-04-22 12:44:05

标签: lucene sitecore sitecore7

我将所有“段落”子节点粘贴在计算字段中的“文章”节点上。这是为了实现可以搜索文章和通过其段落内容找到。

为实现这一目标,我在<fields hint="raw:AddComputedIndexField">节点下执行了以下操作:

<field fieldName="Paragraphs" storageType="YES" indexType="TOKENIZED">
    MyWebsite.ComputedFields.Paragraphs,MyWebsite
</field>

在这个计算字段中,我将段落的HTML主体连接在一起。 我假设Sitecore会为我剥离HTML(就像它对富文本字段一样),但它确实是noet。

对于“富文本”字段,可能是RichTextFieldReader剥离HTML标记。反编译代码证实了这一点。 RichTextFieldReader在FieldReaders部分中配置。尝试在下面添加raw:AddFieldReaderByFieldName部分似乎没有做任何事情。

完整部分如下所示,但在此设置中不起作用:

<FieldReaders type="Sitecore.ContentSearch.FieldReaders.FieldReaderMap, Sitecore.ContentSearch">
    <mapFieldByTypeName hint="raw:AddFieldReaderByFieldTypeName">
    ....default stuff here...
    </mapFieldByTypeName>
    <mapFieldByFieldName hint="raw:AddFieldReaderByFieldName">
        <fieldReader fieldName="Paragraphs" fieldReaderType="Sitecore.ContentSearch.FieldReaders.RichTextFieldReader, Sitecore.ContentSearch"></fieldReader>
    </mapFieldByFieldName>
</FieldReaders>

关于如何实现这一点的任何其他线索(通过配置,而不是使用HTML敏捷包等)

1 个答案:

答案 0 :(得分:3)

问题是mapFieldByFieldName期望匹配Sitecore项目中具有该名称的字段,而不是索引中的自定义计算字段,因此永远不会调用字段阅读器。

我不知道如何从配置中实现这一点,但如果您不想直接使用HAP但愿意使用某些代码,那么在您的计算字段类中将字段粘贴在一起之后,只需执行Sitecore所做的事情即可。 GetPlainText()方法:

string input = "concatenated string";
return HttpUtility.HtmlDecode(Regex.Replace(input, "<[^>]*>", string.Empty));

或使用util方法Sitecore.StringUtil.RemoveTags(text)