我正在尝试允许内容编辑器选择从搜索页面中排除项目。正在搜索的模板上有一个复选框,指示它是否应该显示。我已经看到一些涉及继承Sitecore.Search.Crawlers.DatabaseCrawler并覆盖AddItem方法(Excluding items selectively from Sitecore's Lucene search index - works when rebuilding with IndexViewer, but not when using Sitecore's built-in tools)的答案。但是,从控制面板重建索引时似乎没有遇到此问题。我已经能够在Sitecore.ContentSearch.SitecoreItemCrawler中找到一个名为RebuildFromRoot的方法。有没有人确切知道该问题的DatabaseCrawler方法何时被击中?我有一种感觉,我需要使用自定义SitecoreItemCrawler和DatabaseCrawler,但我不是积极的。任何见解将不胜感激。我使用的是Sitecore 8.0(rev.150621)。
答案 0 :(得分:7)
继承Sitecore中的默认Lucene爬网程序实现并覆盖IsExcludedFromIndex
方法,返回true以排除该项目的索引:
using Sitecore.ContentSearch;
using Sitecore.Data.Items;
namespace MyProject.CMS.Custom.ContentSearch.Crawlers
{
public class CustomItemCrawler : Sitecore.ContentSearch.SitecoreItemCrawler
{
protected override bool IsExcludedFromIndex(SitecoreIndexableItem indexable, bool checkLocation = false)
{
bool isExcluded = base.IsExcludedFromIndex(indexable, checkLocation);
if (isExcluded)
return true;
Item obj = (Item)indexable;
if (obj["Exclude From Index"] != "1") //or whatever logic you need
return true;
return false;
}
protected override bool IndexUpdateNeedDelete(SitecoreIndexableItem indexable)
{
if (base.IndexUpdateNeedDelete(indexable))
{
return true;
}
Item obj = indexable;
return obj["Exclude From Index"] == "1";
}
}
}
如果某个项目在将来某个日期更新,则需要使用IndexUpdateNeedDelete
方法从索引中删除项目。
使用补丁文件替换您需要索引的爬虫。
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<contentSearch>
<configuration>
<indexes>
<index id="sitecore_master_index">
<locations>
<crawler>
<patch:attribute name="type">MyProject.CMS.Custom.ContentSearch.Crawlers.CustomItemCrawler, MyProject.CMS.Custom</patch:attribute>
</crawler>
</locations>
</index>
...
</indexes>
</configuration>
</contentSearch>
</sitecore>
</configuration>
之后你必须重建索引(从控制面板上就可以了),以便排除这些项目。