【问题标题】:Indexing a group of Sitecore subitems as their parent item将一组 Sitecore 子项索引为其父项
【发布时间】:2014-07-25 16:39:40
【问题描述】:

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

例如

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 的回答很好,但我想知道是否有一种方法可以在“上游”索引子项并将其内容存储在索引中的父项上,而不是在“下游”位置进行索引索引父级并将所有子级内容存储在父级的索引条目中。这样做的原因是,对子项目的任何编辑都将自动重新索引,而无需手动触发对父文章的重新索引。

【问题讨论】:

    标签: c# indexing sitecore sitecore7


    【解决方案1】:

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

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

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

    SITECORE 7: COMPUTED INDEX FIELDS

    实际上,不久前(Sitecore 7 之前)我问了一些非常相似的问题,并被定向到一个非常有帮助的视频:

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

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

    【讨论】:

    • 谢谢@martindavies,我想知道是否还有另一种方法......这种方法是一种“下游”方法(父母对孩子),您可以在其中索引父母并从中收集数据它的孩子。如果可能的话,我想要一种“上游”方法,您可以在其中索引孩子并将其归因于它的父母。你知道这是否可能吗?
    • 我认为您仍然需要使用我的下游方法,但此外您需要一种方法来将索引子项的请求转换为索引父项的请求(例如,通过检查查看如果请求项目的父项是文章)。这超出了我的经验,但我认为您可以使用自定义分析器来实现这一点。
    【解决方案2】:

    恕我直言,实现这一目标的最简单方法是让您的所有页面项目都继承自一个通用基本模板,然后创建一个仅包含从该基本模板继承的项目的索引。

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

    更新

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

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

    【讨论】:

    • 我想我明白你在说什么,但我不清楚你将如何将子项目组合在一起以表示一篇文章。您描述的索引肯定仍会返回指向子项的命中吗?
    • 不,这个想法是页面项是实际的文章(父项),而其他项(子项)只是其他一些不从基本页面模板继承的数据项。因此,只有父项会包含在索引中。
    • 如果只有父项在索引中,那么子项的内容都不会在索引中,从而违背了所述索引的目的。我需要能够搜索所有子项的字段内容并将父项作为结果返回。
    • @theyetiman - 一开始我误解了你的帖子。我已经更新了我的答案,以更好地适应您所描述的情况
    • 感谢您的编辑。我想这是一个解决方案,但问题是我想使用索引命中作为搜索结果显示给用户。换句话说,我想在页面上显示匹配文章(不是文章子项)的列表。使用重写处理器或自定义项目解析器将适用于指向子项目的链接,但我不想首先生成该链接。我只想生成指向父项的链接。理想情况下,我希望索引在不对结果进行后处理的情况下完成所有这些工作。看起来@martindavies 的答案可能是我唯一的选择。
    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多