我在Sitecore v7.1中创建了自定义内容搜索索引。
索引和抓取工作正常,我能够搜索索引并正确返回项目。我遇到的问题是索引有时会填充“爬行根”值之外的项目(请参阅下面的配置。
到目前为止,解决方法是向Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config
添加模板排除,但这很烦人,因为我有很多非内容模板,我不想继续添加到此文件。
我的索引配置如下(这是在配置包含文件中):
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> <sitecore> <contentSearch> <configuration type="Sitecore.ContentSearch.LuceneProvider.LuceneSearchConfiguration, Sitecore.ContentSearch.LuceneProvider"> <indexes hint="list:AddIndex"> <index id="artscentre_web_index" type="Sitecore.ContentSearch.LuceneProvider.SwitchOnRebuildLuceneIndex, Sitecore.ContentSearch.LuceneProvider"> <param desc="name">$(id)</param> <param desc="folder">$(id)</param> <!-- This initializes index property store. Id has to be set to the index id --> <param desc="propertyStore" ref="contentSearch/databasePropertyStore" param1="$(id)" /> <strategies hint="list:AddStrategy"> <!-- NOTE: order of these is controls the execution order --> <strategy ref="contentSearch/indexUpdateStrategies/onPublishEndAsync" /> </strategies> <commitPolicyExecutor type="Sitecore.ContentSearch.CommitPolicyExecutor, Sitecore.ContentSearch"> <policies hint="list:AddCommitPolicy"> <policy type="Sitecore.ContentSearch.TimeIntervalCommitPolicy, Sitecore.ContentSearch" /> </policies> </commitPolicyExecutor> <locations hint="list:AddCrawler"> <crawler type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch"> <Database>web</Database> <Root>/sitecore/content/Sites/ArtsCentre/Home</Root> </crawler> </locations> </index> </indexes> </configuration> </contentSearch> </sitecore> </configuration>
正如您所看到的,我的抓取工具根标记应该表示索引仅对我的内容项编制索引,但它是从/sitecore/content/Sites/SiteA/Configuration
对此的任何帮助都会很棒:)
干杯, 贾斯汀
答案 0 :(得分:6)
这是sitecore中的一个错误!据报道,但没有估计何时修复。
该错误发生在Sitecore.ContentSearch.SitecoreItemCrawler.IsAncestorOf
方法中,它没有进行正确的检查。
这是我从sitecore支持获得的建议:
与此同时,我们建议您实施以下解决方法 解决问题:
创建一个派生自
Sitecore.ContentSearch.SitecoreItemCrawler
类的类。覆盖其IsAncestorOf方法。新方法应如下所示:
protected override bool IsAncestorOf(Item item) { bool result; using (new SecurityDisabler()) { using (new CachesDisabler()) { //result = item.Axes.IsAncestorOf(item); result = this.RootItem.Axes.IsAncestorOf(item); } } return result; }
将类构建到程序集中。将程序集放在站点的bin文件夹中。
在配置中注释掉所有出现的SitecoreItemCrawler类。插入新的爬网程序定义以使用新的爬网程序。 默认情况下,您需要修改以下配置文件:
Sitecore.ContentSearch.Lucene.Index.Core.config Sitecore.ContentSearch.Lucene.Index.Master.config Sitecore.ContentSearch.Lucene.Index.Web.config <!--<crawler type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">--> <crawler type="[fully qualified class name], [your assembly name]">
- 醇>
重建索引。