Sitecore 是否从索引中全局排除克隆项?

Sitecore 是否从索引中全局排除克隆项?,sitecore,lucene.net,sitecore7,Sitecore,Lucene.net,Sitecore7,我正在寻找一种优雅的方法,从我的web索引中排除克隆项目。我的搜索结果中显示了重复项。如果只显示原始项目,而不显示克隆项目,我会更喜欢 我想到的一些可能的解决方案是: 如果项目的_源字段不为空,请创建全局项目提升规则以大幅降低提升值。这不是首选,因为它只会降低分数,不会从搜索结果中删除克隆 排除我使用扩展Where子句执行的每个查询中的克隆项。这也是不可取的,因为这意味着我需要记住在所有查询中包含此子句。此外,克隆项仍保留在索引中 Sitecore v7.1您可以创建自定义爬网程序,并在其中添加

我正在寻找一种优雅的方法,从我的web索引中排除克隆项目。我的搜索结果中显示了重复项。如果只显示原始项目,而不显示克隆项目,我会更喜欢

我想到的一些可能的解决方案是:

如果项目的_源字段不为空,请创建全局项目提升规则以大幅降低提升值。这不是首选,因为它只会降低分数,不会从搜索结果中删除克隆

排除我使用扩展Where子句执行的每个查询中的克隆项。这也是不可取的,因为这意味着我需要记住在所有查询中包含此子句。此外,克隆项仍保留在索引中


Sitecore v7.1

您可以创建自定义爬网程序,并在其中添加逻辑以排除克隆的项目。 我考虑的方法是创建一个继承自Sitecore.ContentSearch.SitecoreItemCrawler的类,并重写DoAdd方法。 大概是这样的:

受保护的覆盖无效DoAddProviderUpdateContext,SitecoreIndexableItem indexable { Assert.ArgumentNotNullobject上下文,上下文; Assert.ArgumentNotNullobject可索引,可索引; if!indexable.Item.IsClone { base.DoAddcontext,可索引; } } 然后,您需要设置爬虫配置以使用自定义爬虫。 在Sitecore.ContentSearch..Index..config文件中,定义使用哪些爬虫程序。
您需要更新contentSearch/configuration/indexes/locations/crawler元素,并在其中指向您的类。

您可以创建一个自定义爬虫,并在其中添加逻辑以排除克隆的项。 我考虑的方法是创建一个继承自Sitecore.ContentSearch.SitecoreItemCrawler的类,并重写DoAdd方法。 大概是这样的:

受保护的覆盖无效DoAddProviderUpdateContext,SitecoreIndexableItem indexable { Assert.ArgumentNotNullobject上下文,上下文; Assert.ArgumentNotNullobject可索引,可索引; if!indexable.Item.IsClone { base.DoAddcontext,可索引; } } 然后,您需要设置爬虫配置以使用自定义爬虫。 在Sitecore.ContentSearch..Index..config文件中,定义使用哪些爬虫程序。
您需要更新contentSearch/configuration/index/locations/crawler元素,并在那里指向您的类。

我的方法如下:

公共类InboundIndexFilter:InboundIndexFilterProcessor { 公共覆盖无效ProcessInboundIndexFilterArgs参数 { var item=args.IndexableToIndex作为SitecoreIndexableItem; 如果item!=null&&!item.item.Versions.IsLatestVersion | | item.item.IsClone { args.IsExcluded=true; } } } 它跳过克隆和非最新版本。然后我更新了相应的管道设置:


我的方法是这样的:

公共类InboundIndexFilter:InboundIndexFilterProcessor { 公共覆盖无效ProcessInboundIndexFilterArgs参数 { var item=args.IndexableToIndex作为SitecoreIndexableItem; 如果item!=null&&!item.item.Versions.IsLatestVersion | | item.item.IsClone { args.IsExcluded=true; } } } 它跳过克隆和非最新版本。然后我更新了相应的管道设置:


我只想补充一点,您可能希望替代IsExcludedFromIndex。这是一个多一点说什么,你正试图实现。不过,这两种解决方案都会奏效。谢谢你的建议,Jens!Sitecore.ContentSearch.SitecoreItemCrawler似乎是密封类,是否还有其他爬虫类可以从中继承?请尝试从Sitecore.ContentSearch.LuceneProvider.Crawlers.LuceneDatabaseCrawler继承。我记得Sc7开发团队告诉我们应该使用它。我在这里写了一篇关于索引机制的博客:你可以使用SitecoreItemCrawler,但需要更新到Sitecore的更新版本。被密封的类是一个错误,在Sitecore 7的131127修订版和Sitecore 7.1中也已修复。我只想补充一点,您可能希望替代IsExcludedFromIndex。这是一个多一点说什么,你正试图实现。不过,这两种解决方案都会奏效。谢谢你的建议,Jens!Sitecore.ContentSearch.SitecoreItemCrawler似乎是密封类,是否还有其他爬虫类可以从中继承?请尝试从Sitecore.ContentSearch.LuceneProvider.Crawlers.LuceneDatabaseCrawler继承。我记得Sc7开发团队告诉我们应该使用它。我在这里写了一篇关于索引机制的博客:你可以使用SitecoreItemCrawler,但需要更新到Sitecore的更新版本。被密封的类是一个错误,在Sitecore 7的131127修订版和Sitecore 7.1中也已修复。