将一组Sitecore子项索引为其父项

时间:2014-07-25 16:39:41

标签: c# indexing sitecore sitecore7

在我的内容树中,我有包含子项的项目。子项是父项的内容所在的位置。

E.g。

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

当用户浏览我的网站时,他们永远不会找到任何子项的链接。他们只会访问“文章容器”的网址,其中包含所有子项目都显示在页面上的文章。

在常规索引方案中,所有3个子项都与查询 “foo” 匹配,并在结果中返回。我想创建一个纯粹用于网站搜索的Sitecore 7索引,该索引将返回 “foo”父项(“文章容器”) > 即可。我不希望在查询结果中返回任何子项。

  • 这可能与某些计算字段的组合有关, 入站或出站索引过滤器(或其他我没有听到过的内容) 关于)?

  • 或者我必须解析输出并解析父输出 将项目显示给用户之前的项目?

修改

@martindavies的答案很好,但我想知道是否有办法在索引“上游”进行索引子项目并将其内容存储在索引中的父项目中,而不是“下游”。索引父级并将所有子级内容存储在父级索引条目中。这样做的原因是,对子项的任何编辑都将自动重新编制索引,而无需手动触发父文章的重新索引。

2 个答案:

答案 0 :(得分:5)

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

  • 该项目是否被归类为文章?
  • 如果是,则遍历每个子项目
  • 对于每个子项,循环遍历字段并将内容添加到计算字段

这是一篇很好的文章,可以帮助您入门:

SITECORE 7: COMPUTED INDEX FIELDS

我实际上曾经问了一段非常类似的事情(在Sitecore 7之前),并被引导到一个非常有用的视频:

Sitecore - Indexing data from presentation components with non-context datasources

这种方法的好处在于它不依赖于引用的项目是页面项的子项。 (FWIW我不喜欢在页面下存储页面内容项。我更喜欢将它们保留在内容树之外。)

答案 1 :(得分:0)

恕我直言,实现此目的的最简单方法是让所有页面项继承自公共基本模板,然后创建仅包含从所述基本模板继承的项的索引。

从更高级别考虑Sitecore,即不考虑基于字段值(可以随时更改)的索引,而是考虑基于所需项目类型的索引。

<强>更新

注意:在我的原始答案(上图)中,我略微误解了您尝试使用索引实现的目标。如果您只想索引代表您要访问的页面的项目,则上述情况将成立。

恕我直言,对于你的情况,最好的办法是像往常一样实际运行索引(将子项目索引为点击点),然后使用URL重写/自定义重写处理器来指导所有请求而是将文章项目的子项改为文章项目。