Indexing Sitecore 8 XP ContentSearch:从索引中排除路径

Indexing Sitecore 8 XP ContentSearch:从索引中排除路径,indexing,solr,sitecore,sitecore8,commerce,Indexing,Solr,Sitecore,Sitecore8,Commerce,我在对常规索引“Sitecore\u master\u index”、“Sitecore\u web\u index”进行Sitecore索引时遇到了问题,因为爬虫程序/索引器会检查数据库中的所有项目,这会花费很长时间 我导入了数千个产品,其中包含大量的规范,并且在产品存储库中有数十万个项目 如果我可以从索引中排除路径,它就不必检查一百万个项目来排除模板 后续行动 我实现了一个自定义爬虫程序,它将路径列表从索引中排除: $(id) sitecore\u web\u索引 sitecore\u w

我在对常规索引“Sitecore\u master\u index”、“Sitecore\u web\u index”进行Sitecore索引时遇到了问题,因为爬虫程序/索引器会检查数据库中的所有项目,这会花费很长时间

我导入了数千个产品,其中包含大量的规范,并且在产品存储库中有数十万个项目

如果我可以从索引中排除路径,它就不必检查一百万个项目来排除模板

后续行动

我实现了一个自定义爬虫程序,它将路径列表从索引中排除:


$(id)
sitecore\u web\u索引
sitecore\u web\u索引\u秒
网状物
/站点核心
/sitecore/内容/产品存储库
此外,我还激活了SwitchOnSolrRebuildIndex,因为它具有出色的ootb功能

使用System.Collections.Generic;
使用System.Linq;
使用Sitecore.ContentSearch;
使用Sitecore.Diagnostics;
命名空间Sitecore.ContentSearch.Utilities.Crawler
{
公共类ExcludePathsItemCrawler:SitecoreItemCrawler
{
私有只读列表excludeItemsList=新列表();
公共列表排除项列表
{
得到
{
返回排除项列表;
}
}
受保护的重写bool IsExcludedFromIndex(SitecoreIndexableItem indexable,bool checkLocation=false)
{
Assert.ArgumentNotNull(可索引,“项”);
if(ExcludeItemsList.Any(path=>indexable.AbsolutePath.StartsWith(path)))
{
返回true;
}
返回基.IsExcludedFromIndex(可索引,检查位置);
}
}
}

导入大量数据时,应尝试暂时禁用数据索引,否则会遇到爬虫无法跟上的问题

这里有一篇关于在导入数据时禁用索引的文章,这是为Lucene写的,但我相信你也可以对Solr做同样的事情

另一种选择是将产品存储在单独的Sitecore数据库中,而不是主数据库中

将另一个帖子插入核心:


您可以覆盖要更改的索引所使用的
SitecoreItemCrawler
类:


主人
/站点核心
然后,您可以添加自己的参数,例如
ExcludeTree
,甚至是
ExcludedBranches
列表

在类的实现中,只需重写方法

public override bool从索引中排除(可索引)

并检查它是否在排除节点下。

我尝试过,但遗憾的是没有效果。16664 14:36:26警告索引管理员。在索引站点Core\u master\u索引上触发FullRebuild。14904 14:36:51信息爬虫[sitecore\u master\u index]:处理了1000个项目。。。14904 14:46:37信息爬虫[sitecore\u master\u index]:已处理237000个项目。。。它仍然会检查每一项,确实如此。这是无法避免的。Sitecore在完整索引重建期间检查每个项目。但这样,您就不必检查排除的模板,这比检查项目是否是另一个项目的后代要耗费更多的CPU。最后,我做到了,在各自的重新索引中,整个索引不应该经常发生,因为项目应该在发布时被索引,再加上工作流中的自动发布应该可以做到这一点。thxalot MarekI已经在导入期间禁用了相关索引。反正是Thx!也许我不得不选择单独的DB选项……还有一件事——你可以调整FullRebuildeMCountThreshold来停止索引的完全重建,你还可以确保产品存储在爬虫无法访问的树中。爬虫程序有一个根设置-如果您要将产品移到这个外部,爬虫程序将不会检查它们。如果要单独为产品编制索引,则可以为其创建IndexConfiguration.worth,并可能将indexable.AbsolutePath和path值设置为Lower,以防止大小写问题。