从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