我正在尝试从Sitecore的Web索引中排除所有克隆。我创建了一个继承自Sitecore.ContentSearch.SitecoreItemCrawler
的自定义抓取工具,使用以下代码覆盖IsExcludedFromIndex
方法:
protected override bool IsExcludedFromIndex(SitecoreIndexableItem indexable, bool checkLocation)
{
if (indexable.Item["Hide from Search"] == "1")
return true;
if (indexable.Item.IsClone)
return true;
return base.IsExcludedFromIndex(indexable, checkLocation);
}
我的"Hide from Search"
字段有效:具有该字段集的任何项目都不包含在Web索引中。但是,indexable.Item.IsClone
永远不会成立,并且所有“克隆”都保留在Web索引中。
当我针对此抓取工具运行主索引时,IsClone
对于每个克隆都为true,并且它们不包含在索引中。我怀疑它适用于master而不适用于web索引,因为克隆会在发布目标(as noted by John West)上进行扩展。
道歉,如果这个问题被认为是Globally exclude cloned items from index?的副本 - 那里的解决方案对我不起作用,而且我正在使用SOLR(vs Lucene)和更新版本的Sitecore,所以我相信这可能是一个单独的问题。
那么,如何从Sitecore 7.2 Web(发布目标)数据库的SOLR索引中排除所有克隆?
答案 0 :(得分:2)
正如您在问题中所写,IsClone
属性与已发布的项目无关,导致Sitecore清除__Source
字段的值。
这就是为什么没有开箱即用的方法来确定Web数据库中的项目是否是克隆。
您可以使用的是John West在其博文Identify Cloned Items Sitecore ASPNET CMS Publishing Target Databases中提出的解决方案。简而言之,您需要将处理器添加到发布管道,并将__Source
字段的值保存在另一个自定义字段中,或者至少在自定义Is Cloned
字段中存储布尔值。
然后您可以使用您的方法,而不是检查IsClone
您需要检查新的自定义字段是否为空。