如何使用Sitecore(新方法)使用lucene索引指定要索引的字段?例如,我只想索引字段'title'和'text'。似乎有一个IndexAllField参数可以设置为False但是如何设置哪个字段需要被索引?
我正在使用Sitecore.Search.Crawlers.DatabaseCrawler。
谢谢
答案 0 :(得分:3)
您使用的是Advanced Database Crawler吗?如果是这样,您可以添加一些部分以通过其GUID包含特定字段,并通过其GUID排除特定字段。下面我提供了一个代码段,其中<include>
节点的提示属性定义是否应包含或排除字段
<master type="Sitecore.SharedSource.Search.Crawlers.AdvancedDatabaseCrawler,Sitecore.SharedSource.Search">
<Database>master</Database>
<Root>/sitecore/content</Root>
<IndexAllFields>false</IndexAllFields>
<include hint="list:IncludeField">
<!-- some field you'd want to include -->
<fieldId>{8CDC337E-A112-42FB-BBB4-4143751E123F}</fieldId>
</include>
<include hint="list:ExcludeField">
<!-- __revision field -->
<fieldId>{8CDC337E-A112-42FB-BBB4-4143751E123F}</fieldId>
<!-- __context menu field -->
<fieldId>{D3AE7222-425D-4B77-95D8-EE33AC2B6730}</fieldId>
<!-- __security field -->
<fieldId>{DEC8D2D5-E3CF-48B6-A653-8E69E2716641}</fieldId>
<!-- __renderings field -->
<fieldId>{F1A1FE9E-A60C-4DDB-A3A0-BB5B29FE732E}</fieldId>
</include>
您可以在SVN上看到a sample search config for the Advanced Database Crawler。
答案 1 :(得分:2)
如果您使用的是标准Sitecore DatabaseCrawler,我建议您创建一个继承自Sitecore数据库爬网程序的自定义爬网程序,然后覆盖AddAllFieldsMethod。然后,只需配置索引即可使用自定义搜寻器
您可以查看高级数据库爬网程序的源代码,以获取如何完成此操作的示例。这样的事情:(注意,这还没有被测试过)
public class DatabaseCrawler : Sitecore.Search.Crawlers.DatabaseCrawler
{
protected override void AddAllFields(Lucene.Net.Documents.Document document, Sitecore.Data.Items.Item item, bool versionSpecific)
{
if(IndexAllFields)
{
base.AddAllFields(document, item, versionSpecific);
}
else
{
var fieldsToIndex = new List<string>() {"title", "Text"};
foreach (var field in fieldsToIndex)
{
var scField = item.Fields[field];
document.Add(new LuceneField(scField.Key, scField.Value, LuceneField.Store.NO, LuceneField.Index.UN_TOKENIZED));
}
}
}
}