【问题标题】:Sitecore 6.4 + Lucene - Template inheritanceSitecore 6.4 + Lucene - 模板继承
【发布时间】:2011-03-30 11:22:56
【问题描述】:

在搞清楚 Lucene 几个小时后,我放弃了。希望你能帮忙。

设置

在我们当前的 Sitecore 树中,我们有模板 2 模板继承级别。 (假设车辆 -> 汽车 -> 一级方程式/车辆 -> 船)。

我现在需要通过 Lucene 获取的是每个 ContentItem 从某个模板直接间接继承。

例如:

  • 获取车辆 -> 返回:“通用”车辆、汽车、F1 赛车和船只
  • 获取汽车 -> 返回:汽车、F1 赛车

我认为是在Lucene中使用_templates-field,即:
获取车辆 -> _templates 包含 Vehicle-template-guid。 获取汽车 -> _templates 包含 Car-template-guid。

问题

我遇到的主要问题是 F1 Car-模板的内容项_templates-字段中包含 Cars 和 F1 Car,并且 不是通用的“车辆”。

我可能误解了 _templates-field,但我想知道是否还有其他选项。


网站核心配置:

内容项:

  • 网站核心
    • 内容
      • 首页
        • A类别
          • 一个孩子 1
          • 一个孩子 1.1
          • 一个孩子 2

模板(级别 = 继承):

  • 主要实体
    • 子实体 1
      • 子实体 1.1
    • 子实体 2
  • 类别

【问题讨论】:

  • 您采用哪种 Lucene 方法? “旧”Lucene 方法还是“新”方法?你在用Advanced Database Crawler吗?
  • 我们正在开发一个自定义索引,由继承 Sitecore.Search.Crawlers.DatabaseCrawler 的自定义爬虫维护。这个爬虫也向项目添加了一些我们的自定义字段。 - 目前,我正在尝试的解决方案是将 item.Template.ID.Guid 和(递归)每个 baseTemplate.Guid 写入一个新字段。我认为这会起作用(它与 _path-field 非常相似,只是用于模板继承),我会告诉你的。

标签: templates inheritance lucene sitecore


【解决方案1】:

创建一个继承 Sitecore.Data.Indexing.Index 的新索引器,并重写 AddFields 方法,如下所示:

protected override void AddFields(Item item, Document document)
{   
    // Add base fields
    base.AddFields(item, document);

    // Add all inherited templates id to a field 
    string TEMPLATE-PATH="get template path for this item here";
    document.Add(new Field("template-path", TEMPLATE-PATH, Field.Store.NO, Field.Index.TOKENIZED)); 
}

然后你可以通过“模板路径”字段搜索它。

【讨论】:

  • 正如@原始帖子的 cmets 所提到的,我正在使用新的 Sitecore Lucene 方法。但是,您提到的与我解决问题的方式类似:添加了一个新字段,包括整个模板层次结构。感谢 Mark 和 chiesa,将这个标记为答案。
  • 我的意思是,不是新的爬虫,而是新的索引器。在配置中,您可以编辑索引如下,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
相关资源
最近更新 更多