Csharp/C#教程:从Sitecore的Lucene搜索索引中有选择地排除项目 – 在使用IndexViewer重建时有效,但在使用Sitecore的内置工具时无效分享


从Sitecore的Lucene搜索索引中有选择地排除项目 – 在使用IndexViewer重建时有效,但在使用Sitecore的内置工具时无效

在由Sitecore 6.2提供支持的站点上,我需要让用户能够有选择地从搜索结果中排除项目。

为此,我添加了一个名为“包含在搜索结果中”的复选框字段,我创建了一个自定义数据库搜寻器来检查该字段的值:

〜 App_Config Include Search Indexes Website.config:

    ...   ...        

〜 LIB 搜索索引 CustomCrawler.cs:

 using Lucene.Net.Documents; using Sitecore.Search.Crawlers; using Sitecore.Data.Items; namespace MyProject.Lib.Search.Indexing { public class CustomCrawler : DatabaseCrawler { ///  /// Determines if the item should be included in the index. ///  ///  ///  protected override bool IsMatch(Item item) { if (item["include in search results"] != "1") { return false; } return base.IsMatch(item); } } } 

有趣的是,如果我使用Index Viewer应用程序重建索引,一切都表现正常。 未选中“包含在搜索结果中”复选框的项目不会包含在搜索索引中。

但是,当我在Sitecore控制面板应用程序中使用搜索索引重建程序或当IndexingManager自动更新搜索索引时,所有项目都包括在内,无论其“包括在搜索结果中”复选框的状态如何。

我还在自定义爬虫类中设置了许多断点,当我使用内置索引器重建搜索索引时,应用程序永远不会遇到任何断点。 当我使用索引查看器时,它确实击中了我设置的所有断点。

如何让Sitecore的内置索引流程尊重我的“包含在搜索结果中”复选框?

我昨天和Alex Shyba谈过,我们能够弄清楚发生了什么。 我的配置存在一些问题,导致一切无法正常工作:

Alex还指出我的一些可扩展性设置不正确。 特别:

要在CD实例上手动重建搜索索引,由于无法访问Sitecore后端,我还安装了RebuildDatabaseCrawlers.aspx (来自本文 )。

我想我已经找到了一个中途解决方案。

以下是Sitecore.Shell.Applications.Search.RebuildSearchIndex.RebuildSearchIndexForm.Builder.Build()的一个有趣片段,它由控制面板应用程序中的搜索索引重建器调用:

 for (int i = 0; i < database.Indexes.Count; i++) { database.Indexes[i].Rebuild(database); ... } 

database.Indexes包含一组Sitecore.Data.Indexing.Index ,它不使用数据库爬虫来重建索引!

换句话说,内置搜索索引器在重建完全忽略web.config的搜索配置设置的搜索索引时使用完全不同的类。

为解决此问题,我更改了以下文件:〜 App_Config Include Search Indexes Website.config:

   ...  ...  

〜 LIB 搜索索引 CustomIndex.cs:

 using Sitecore.Data; using Sitecore.Data.Indexing; using Sitecore.Diagnostics; namespace MyProject.Lib.Search.Indexing { public class CustomIndex : Index { public CustomIndex(string name) : base(name) { } public override void Rebuild(Database database) { Sitecore.Search.Index index = Sitecore.Search.SearchManager.GetIndex(Name); if (index != null) { index.Rebuild(); } } } } 

这种方法唯一需要注意的是,它将为每个数据库重建索引,而不仅仅是所选数据库(我猜测这就是为什么Sitecore有两个完全独立的方法来重建索引)。

Sitecore 6.2使用旧的和新的搜索API,因此我相信索引的构建方式不同。 CMS 6.5(即将发布)只使用较新的api – 例如,Sitecore.Search

上述就是C#学习教程:从Sitecore的Lucene搜索索引中有选择地排除项目 – 在使用IndexViewer重建时有效,但在使用Sitecore的内置工具时无效分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1025602.html

(0)
上一篇 2022年1月8日
下一篇 2022年1月8日

精彩推荐