Indexing 防止为项目的空语言版本编制索引

Indexing 防止为项目的空语言版本编制索引,indexing,solr,sitecore,Indexing,Solr,Sitecore,我们的解决方案中有20多种语言,任何时候我们上传新媒体或创建/编辑Sitecore项目,索引过程都很慢。项目的空语言版本正在被索引,这大大降低了索引速度。有没有办法防止项目的空语言版本被索引?我猜应该有一个管道,我可以进入并截获空项,防止它们被索引 此外,防止空版本索引是否会产生意外后果 谢谢如果您需要在索引时过滤掉空项目,您可以尝试这些入站过滤器管道处理器之一。(但此解决方案仅适用于Sitecore 7+版本) 以上链接现已断开,类似文档可在此处找到: 在处理器中,您可以检查正在编制索引的项

我们的解决方案中有20多种语言,任何时候我们上传新媒体或创建/编辑Sitecore项目,索引过程都很慢。项目的空语言版本正在被索引,这大大降低了索引速度。有没有办法防止项目的空语言版本被索引?我猜应该有一个管道,我可以进入并截获空项,防止它们被索引

此外,防止空版本索引是否会产生意外后果


谢谢

如果您需要在索引时过滤掉空项目,您可以尝试这些入站过滤器管道处理器之一。(但此解决方案仅适用于Sitecore 7+版本)

以上链接现已断开,类似文档可在此处找到:

在处理器中,您可以检查正在编制索引的项是否具有该项语言的版本,并将ISExclude属性更新为false


只要从索引中获取结果的代码能够处理它,我就不认为筛选出空项会有任何问题。

为了进一步说明
IsExcludedFromIndex
属性,我将提供一些示例。让我们使用一个示例索引定义:


$(id)
$(id)
主人
/网站核心/内容

您可以在这里看到,默认的爬虫类已替换为自定义爬虫类

您将创建如下子类:

公共类CustomItemCrawler:SitecoreItemCrawler
并重写
IsExcludedFromIndex
属性,如下所示:

protectedoverride bool IsExcludedFromIndex(SitecoreIndexableItem indexable,bool checkLocation=false)
{
项目obj=(项目)可索引;
Assert.ArgumentNotNull((object)obj,“item”);
IDocumentBuilderOptions documentOptions=this.documentOptions;
IsNotNull((对象)documentOptions,“documentOptions”);
如果(!obj.Database.Name.Equals(this.Database,StringComparison.InvariantCultureIgnoreCase))
{
Event.RaiseEvent(“索引:excludedfromindex”,(对象)this.index.Name,(对象)obj.Uri);
返回true;
}
else if(检查位置&!this.RootItem.Axes.IsAncestorOf(obj))
{
Event.RaiseEvent(“索引:excludedfromindex”,(对象)this.index.Name,(对象)obj.Uri);
返回true;
}
否则如果(…)
{
Event.RaiseEvent(“索引:excludedfromindex”,(对象)this.index.Name,(对象)obj.Uri);
返回true;
}
其他的
{
如果(!documentOptions.ExcludedTemplates.Contains(obj.TemplateID.ToString()))
返回false;
Event.RaiseEvent(“索引:excludedfromindex”,(对象)this.index.Name,(对象)obj.Uri);
返回true;
}
}

我已编辑了我的问题,以修复一个打字错误。我正在寻找一种方法来防止项目的空语言版本被索引。在我的实例中,我将此设置设置为true,以便发布文件夹项目。好的,我明白了。没问题。我用一种我过去使用过的技术更新了答案,该技术修复了Sitecore和Solr的一个bug,旧版本的条目将进入索引。您应该能够使用处理器阻止空项目进入。希望有帮助!非常感谢。这就是我一直在寻找的。我对这一行有点困惑——“只要你从索引中获取结果的代码能够处理它,我就不认为过滤掉空项会有任何问题。”。你能解释一下你在这里的意思吗?很抱歉让你感到困惑。我的意思是,如果出于任何原因,您可能需要空项,并且您有任何依赖它的代码(可能是非常罕见的情况)