索引一组Sitecore子项作为它们的父项

本文关键字:Sitecore 一组 索引 | 更新日期: 2023-09-27 18:14:45

在我的内容树中,我有包含子项的项。子条目是父条目内容所在的地方。

Article container   <---- only this item is navigable to the user
    |
    |- Text block = "foo foo foo foo"
    |- Image      = "foo.jpg"
    |- Text block = "foo foo foo"

当用户浏览我的网站时,他们永远找不到任何子项的链接。他们只能访问"文章容器"的url,该url有一个表示方式,使所有子项都显示在页面上。

在常规索引场景中,所有3个子条目将匹配查询"foo",并在结果中返回。我想创建一个Sitecore 7索引纯粹用于网站搜索,这将返回项("文章容器"),用于搜索查询术语"foo"。我不希望在查询结果中返回任何子项。

  • 这是否可以通过一些计算字段的组合来实现?入站或出站索引过滤器(或其他我没听说过的东西))呢?

  • 或者我必须解析输出并解析父节点项,然后再显示给用户?

编辑

@martindavies的回答很好,但我想知道是否有一种方法可以做索引"上游",在那里你索引子项并将其内容存储在索引中的父项,而不是"下游",你索引父项并将所有子内容存储在父项的索引项中。这样做的原因是,对子条目的任何编辑都将自动重新索引,而不必手动触发对父条目的重新索引。

索引一组Sitecore子项作为它们的父项

您可以创建一个名为'childitemcontent'的计算字段,它在索引过程中执行以下操作:

  • 被索引的条目是文章吗?
  • 如果是,循环遍历每个子项
  • 对于每个子项,循环遍历字段并将内容添加到计算字段

这里有一篇很好的文章可以让你开始:

SITECORE 7: COMPUTED INDEX FIELDS

我实际上问过一个非常类似的问题(在Sitecore 7之前),并被引导到一个非常有用的视频:

Sitecore -从具有非上下文数据源的表示组件索引数据

这种方法的好处是它不依赖于被引用的项是页面项的子项。(顺便说一句,我不喜欢将页面内容项存储在页面下。我更喜欢把它们放在内容树之外)

我认为实现这一点最简单的方法是让所有页面项都继承自一个公共基模板,然后创建一个仅包含从该基模板继承的项的索引。

从更高的层次考虑Sitecore,即不要考虑基于字段值的索引(这总是可以改变的),而是考虑基于你想要的项目类型的索引。

注意:在我最初的回答(上面)中,我稍微误解了您试图通过索引实现的目标。如果您只是想索引代表您要访问的页面的项目,则上述内容将成立。

IMHO,对于您的情况,最好的做法是像往常一样运行索引(这将索引子项目作为命中点),但然后使用URL重写/自定义重写处理器将所有请求指向文章项目的子项目,而不是文章项目。