【问题标题】:Sitecore 7 Content Search indexing items outside of crawler rootSitecore 7 内容搜索索引爬虫根目录之外的项目
【发布时间】:2014-03-06 03:20:25
【问题描述】:

我在 Sitecore v7.1 中创建了自定义内容搜索索引。

索引和爬网工作正常,我能够正确搜索索引并返回项目。我遇到的问题是索引有时会填充“爬行根”值之外的项目(请参阅下面的配置。

到目前为止,解决方法是将模板排除添加到Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config,但这很烦人,因为我有很多非内容模板,我不想继续添加到这个文件中。

我的索引配置如下(这是在一个配置包含文件中):

    
    
        
            $(id)
                        $(id)
                        
                        
策略>
                        政策>
                        网络数据库>
                                /sitecore/content/Sites/ArtsCentre/Home爬虫>
                        位置>
                    索引>
                索引>
            配置>
        内容搜索>
    
配置>

如您所见,我的爬虫根标记应该意味着索引只索引我的内容项,但它正在索引来自诸如/sitecore/content/Sites/SiteA/Configuration 等位置的项目

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

干杯, 贾斯汀

【问题讨论】:

    标签: lucene sitecore sitecore7


    【解决方案1】:

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

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

    这是我从网站核心支持获得的建议:

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

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

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

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

    【讨论】:

    • 小提示:做一次完整的索引重建,会清除索引,只放入允许的文档(因为它会从文档根目录开始)。每次发布东西时,如果它通过其他检查(模板包含/排除),它将被放入索引中,因为该错误!
    • 感谢您提供该修复程序,我将着手实施该修复程序,看看我的进展如何。随着它通过其他检查并被添加到索引中,上面的修复是否会阻止这种情况发生,但我怀疑这是正在发生的事情,因为索引的完全重建会删除不应该存在的项目。跨度>
    • 工作正常,除了 CachesDisabler()。我需要参考什么才能使用它?
    • 很抱歉回答迟了,但似乎 CachesDisabler 是 Sitecore.ContentSearch.dll 文件中的一个内部类。但是您应该能够使用“Sitecore.Data.DatabaseCacheDisabler”。 CachesDisabler 只是 DatabaseCacheDisabler 的包装器。我会用这段代码更新答案
    • 请注意,这是在 v 7.2 上修复的,而且 CachesDisabler() 具有误导性,因为它仅在 Sitecore.ContentSearch.config 在设置 &lt;setting name="ContentSearch.Indexing.DisableDatabaseCaches" value="true"/&gt; 下配置设置时禁用缓存
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多