Sitecore 7.2和SOLR:从Web索引中排除克隆

时间:2015-02-13 17:05:48

标签: solr sitecore sitecore7 sitecore7.2

我正在尝试从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索引中排除所有克隆?

1 个答案:

答案 0 :(得分:2)

正如您在问题中所写,IsClone属性与已发布的项目无关,导致Sitecore清除__Source字段的值。

这就是为什么没有开箱即用的方法来确定Web数据库中的项目是否是克隆。

您可以使用的是John West在其博文Identify Cloned Items Sitecore ASPNET CMS Publishing Target Databases中提出的解决方案。简而言之,您需要将处理器添加到发布管道,并将__Source字段的值保存在另一个自定义字段中,或者至少在自定义Is Cloned字段中存储布尔值。

然后您可以使用您的方法,而不是检查IsClone您需要检查新的自定义字段是否为空。