我将所有“段落”子节点粘贴在计算字段中的“文章”节点上。这是为了实现可以搜索文章和通过其段落内容找到。
为实现这一目标,我在<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敏捷包等)
答案 0 :(得分:3)
问题是mapFieldByFieldName
期望匹配Sitecore项目中具有该名称的字段,而不是索引中的自定义计算字段,因此永远不会调用字段阅读器。
我不知道如何从配置中实现这一点,但如果您不想直接使用HAP但愿意使用某些代码,那么在您的计算字段类中将字段粘贴在一起之后,只需执行Sitecore所做的事情即可。 GetPlainText()
方法:
string input = "concatenated string";
return HttpUtility.HtmlDecode(Regex.Replace(input, "<[^>]*>", string.Empty));
或使用util方法Sitecore.StringUtil.RemoveTags(text)