可以存在sitecore标记的层次结构

时间:2015-02-02 16:45:12

标签: tags sitecore

是否可以为sitecore标记设置层次结构?

说运输标签的例子。

自行车

_女式自行车

_男士自行车

_儿童自行车

汽车

_福特

_大众汽车

_ Peugot

当我搜索福特时,我希望得到所有标记为福特的物品。当我搜索汽车时,我希望获得标记为Car,Ford,Volkswagen和/或Peugot的所有物品。

当一件物品被标记为福特时,它也不需要单独标记为汽车。

(编辑以提供更好的解释)

3 个答案:

答案 0 :(得分:3)

开箱即用的Sitecore搜索基础架构并不直接支持此功能 - 因为它不知道您的代码树结构如何。但是,可以扩展Lucene集成以启用它。

首先,一些假设:

1)标签 我假设您的Sitecore数据中有一个标记内容树。每个标签都是基于" Tag"模板,因此它可以被识别为标签。例如,您的内容树可能如下所示:

Tags               --> Uses "Folder" template
   Car             --> Uses "Tag" template
     Ford          --> Uses "Tag" template
     Volkswagen    --> Uses "Tag" template
   Bike            --> Uses "Tag" template
     Mens Bike     --> Uses "Tag" template
     Womens Bike   --> Uses "Tag" template

2)应用标签 您的内容项(即被标记的内容项)具有TreeList(或TreeListEx)字段,其数据源是您的"标签"点#1的文件夹。这允许编辑者在他们认为合适时选择一些标签。我将假设这个字段被称为" AppliedTags"

有了这个:

您需要实现一些代码,这意味着在构建搜索索引时,它会附加编辑器使用的标记,以及该标记项的任何父标记。因此,如果编辑附加"福特"那么" Car"也被列入Lucene指数。

您没有指定您正在使用的Sitecore版本 - 但最新版本的一般想法是相同的。但是,旧版本存在一些技术差异。

在Sitecore 7.x(也可能是8个)中,您需要创建一个"计算索引字段"。这基本上是Sitecore在将Item数据传递给Lucene进行索引之前运行的一些自定义代码。您可以使用此自定义代码为Lucene计算包含扩展标记集的新字段。 SC7中计算字段的概述在这些链接中给出:(有更多的东西 - 谷歌更多细节)

http://www.sitecore.net/Learn/Blogs/Technical-Blogs/John-West-Sitecore-Blog/Posts/2013/03/Sitecore-7-Computed-Index-Fields.aspx

http://reasoncodeexample.com/2014/04/01/computed-index-fields-sitecore-7-content-search/

调用时,您的自定义代码将收到当前正在编入索引的Sitecore项。在伪代码中,您的计算字段代码可以:

If the item being processed has an "AppliedTags" field
  Create a list to store results
  For each Tag item specified in the current Item's "AppliedTags" field
      Run a Sitecore Query API to find any ancestors of that Tag which are themselves Tags
      Add the IDs of each of these returned items to the results list
  Return the results list

测试该项目是否具有" AppliedTags"字段是必需的,因为您的代码将针对此搜索索引正在处理的每个项目运行。因此,当遇到模板没有此字段的项时,代码会中断。我假设你的内容树中没有标签。

现在,Lucene索引可以包含所有应用标签及其父级的数据 - 因此现在可以获得所需的搜索结果。它还可以使用更深层的标记树 - 尽管注意标记树越大,索引时需要的处理越多。

您需要修改Lucene的Sitecore配置,将计算字段添加到搜索索引的字段列表中。您可以在标准的Sitecore搜索文档中找到相关说明 - 但我假设新的索引字段被称为" ExpandedTags"。

完成后(并重建您的索引以获取所有新数据),然后您可以编写一个显示Search the "ExpandedTags" index entry for "Car"的Sitecore搜索查询,它将返回最初标有"福特&#34的内容;和#34;大众"同样。

在Sitecore 6.5 / 6.6中,我不认为你可以毫不费力地开箱即用,但是搜索基础设施有一个开源扩展:

https://github.com/sitecorian/SitecoreSearchContrib

"抓取器"该项目的一部分允许使用基于scSearchContrib.Crawler.DynamicFields.BaseDynamicField的类来完成与上面相同的操作。如果您使用此扩展程序生成搜索索引,则可以应用与上述类似的自定义方法。这里有一个使用动态字段的简单示例:

http://www.letsdositecore.com/advanced-database-crawler-and-dynamic-fields/

但是,运行此搜索框架将涉及一些额外的工作,以确保Sitecore使用SearchContrib框架来构建索引。上面链接的github数据中提供了示例配置补丁。

答案 1 :(得分:1)

标记是一种以非分层方式构建内容的方式。因此,应用它们不是分层次地完成的。但是您可以创建多个标记存储库来存储您的标记。您可以在这篇内容丰富的博文中看到一个示例(在"创建您自己的标记"):https://visionsincode.wordpress.com/2014/11/16/tagging-is-fun-in-sitecore/

答案 2 :(得分:0)

在sitecore中使用 Sitecore项目存储桶功能, 搜索已经存在于sitecore7.0和更高版本中,通过使用sitecore搜索Tag1为您提供所有已实现的tag1内容