Sitecore 7内容搜索爬网程序根目录之外的索引项

时间:2014-03-06 03:20:25

标签: lucene sitecore sitecore7

我在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

等位置索引项目

对此的任何帮助都会很棒:)

干杯, 贾斯汀

1 个答案:

答案 0 :(得分:6)

这是sitecore中的一个错误!据报道,但没有估计何时修复。

该错误发生在Sitecore.ContentSearch.SitecoreItemCrawler.IsAncestorOf方法中,它没有进行正确的检查。

这是我从sitecore支持获得的建议:

  

与此同时,我们建议您实施以下解决方法   解决问题:

     
      
  1. 创建一个派生自Sitecore.ContentSearch.SitecoreItemCrawler类的类。

  2.   
  3. 覆盖其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;
     }
    
  4.   
  5. 将类构建到程序集中。将程序集放在站点的bin文件夹中。

  6.   
  7. 在配置中注释掉所有出现的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]">
    
  8.   
  9. 重建索引。

  10.