是否可以为sitecore标签设置层次结构?
例如运输标签示例。
自行车
_女士自行车
_男士自行车
_儿童自行车
车
_福特
_大众
_ Peugot
当我搜索福特时,我想获得所有标记为福特的物品。当我搜索“汽车”时,我想获得所有标记为“汽车”,“福特”,“大众”和/或“ Peugot”的商品。
将商品标记为福特时,也不需要分别标记为汽车。
(编辑以提供更好的解释)
开箱即用的Sitecore搜索基础结构不直接支持此功能-因为它不知道标签的树状结构。但是,可以扩展Lucene集成以启用它。
首先,一些假设:
1)标签,我假设您在Sitecore数据中某处有标签内容树。每个标签都是基于“标签”模板创建的,因此可以将其识别为标签。例如,您的内容树可能如下所示:
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”
有了这个位置:
您需要实现一些代码,这意味着在构建搜索索引时,它会附加使用编辑器的标签以及该标签项的所有父标签。因此,如果编辑者附加“福特”,则“汽车”也将纳入Lucene索引。
您没有指定要使用的Sitecore的版本-但总体思路与最新版本相同。但是,旧版本中存在一些技术差异。
在Sitecore 7.x(可能还有8)中,您需要创建“计算索引字段”。这基本上是Sitecore在将您的商品数据传递给Lucene进行索引之前运行的一些自定义代码。您可以使用此自定义代码为Lucene计算包含扩展标签集的新字段。这些链接提供了SC7中计算字段的概述:(那里还有更多内容-Google提供更多详细信息)
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"
,该查询还将返回最初用“ Ford”和“ Volkswagen”标记的内容。
在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数据中提供了示例配置补丁。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句