可以有带有 sitecore 标签的层次结构吗

Can there be a hierarchy with sitecore tags

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

运输标签示例。

自行车

_女式自行车

_男子自行车

_儿童自行车

汽车

_福特

_大众

_标致

当我搜索 Ford 时,我想获取所有标记为 Ford 的项目。当我搜索 Car 时,我想获取所有标记为 Car、Ford、Volkswagen and/or Peugot 的项目。

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

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

标记是一种以非分层方式构建内容的方式。所以应用它们不是分层完成的。但是您可以创建多个标签存储库来存储您的标签。您可以在这个非常有用的博客 post(在 "Create your own tags" 下)中看到一个示例:https://visionsincode.wordpress.com/2014/11/16/tagging-is-fun-in-sitecore/

在 sitecore 中使用 Sitecore Item Buckets 功能, search在sitecore7.0及以上版本已经存在,通过sitecore search Tag1给你所有真实的tag1内容

开箱即用的 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 点的 "Tags" 文件夹。这允许编辑者选择他们认为合适的标签。我假设这个字段被称为 "AppliedTags"

有了这个:

您需要执行一些代码,这意味着在构建搜索索引时,它会附加编辑器使用的标签,以及该标签项的任何父标签。因此,如果编辑器附加了 "Ford",那么 "Car" 也会被放入 Lucene 索引中。

您没有指定您使用的 Sitecore 版本 - 但总体思路与最新版本相同。但是,旧版本存在一些技术差异。

在 Sitecore 7.x(也可能是 8 个)中,您需要创建一个 "Computed Index Field"。这基本上是 Sitecore 运行 在将项目数据传递给 Lucene 进行索引之前使用的一些自定义代码。您可以使用此自定义代码为包含扩展标签集的 Lucene 计算一个新字段。这些链接给出了 SC7 中计算字段的概述:(那里有更多内容 - google 了解更多详细信息)

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".

完成后(并重建索引以获取所有新数据),您可以编写一个 Sitecore 搜索查询,显示 Search the "ExpandedTags" index entry for "Car" 并且它将 return 最初标记为 "Ford" 和 "Volkswagen" 还有。

在 Sitecore 6.5/6.6 中,我不认为你可以在不付出很多努力的情况下开箱即用,但搜索基础设施有一个开源扩展:

https://github.com/sitecorian/SitecoreSearchContrib

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

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

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