【问题标题】:Sitecore 7 Lucene: strip HTML from computed fieldSitecore 7 Lucene:从计算字段中剥离 HTML
【发布时间】:2014-04-22 12:44:04
【问题描述】:

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

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

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

在这个计算域中,我将段落 HTML 正文连接在一起。 我假设 Sitecore 会为我剥离 HTML(就像它对富文本字段所做的那样),但它没有。

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

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

<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 敏捷包等)

【问题讨论】:

    标签: lucene sitecore sitecore7


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,我最终直接致电GetPlainText()new HtmlField(x.Fields["Body"]).GetPlainText()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2018-03-02
    • 2012-08-23
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多