如何为 Sitecore 实现向 Solr 索引中的 _content 字段添加文本?

Cor*_*ett 3 indexing sitecore solr4 sitecore7.5

这是针对 Sitecore 7.5 - Solr 4.7 实现的。我希望能够修改存储在 Solr 的 _content 字段中的文本。我相信,Sitecore 以某种方式聚合了索引中 _content 字段中某个项目的所有内容字段。(我认为这是正确的)在索引时,我希望能够编写自己的代码,该代码可能会修改存储在 Solr 的 _content 字段中的文本。这可能吗?任何想法我会怎么做?

Mar*_*ies 5

_content是一个计算字段,这意味着在抓取项目时解析该值。您将看到在您的配置中定义了计算字段:

<field fieldName="_content" returnType="string" type="Sitecore.ContentSearch.ComputedFields.MediaItemContentExtractor,Sitecore.ContentSearch">
  <mediaIndexing ref="contentSearch/indexConfigurations/defaultSolrIndexConfiguration/mediaIndexing"/>
</field>
Run Code Online (Sandbox Code Playgroud)

我建议反编译type属性中指定的类以查看它的作用。然后,您可以创建自己的计算字段类(或从该类继承),并替换 type 属性。

计算字段真的很容易使用。他们实现IComputedIndexField需要一个ComputeFieldValue方法。该方法接受一个类型的参数IIndexable(在大多数情况下,具体类是 an Item),并且在每次抓取项目时调用。

因此,在该ComputeFieldValue方法中,您可以将 转换Iindexable为 an Item,然后返回要从该项目中包含的所有字段值的连接字符串。

有关计算字段的更多信息,请参见此处:

http://www.sitecore.net/learn/blogs/technical-blogs/john-west-sitecore-blog/posts/2013/03/sitecore-7-computed-index-fields.aspx

  • 是的,我走了那条路。对我来说奇怪的是它引用的类是 Sitecore.ContentSearch.ComputedFields.MediaItemContentExtractor。当我查看该类的代码时,它似乎只适用于媒体项目。它似乎为每个非媒体内容项返回 NULL。因此,据我所知,除了媒体项目外,_content 将为空。这对我来说似乎很奇怪。也许我误解了 _content 字段实际上是什么。我假设 _content 是所有类型内容项的所有字段的聚合。 (2认同)