如何从使用Sitecore搜索编制索引的表单中排除字段(新方法)

如何从使用Sitecore搜索编制索引的表单中排除字段(新方法),sitecore,Sitecore,如何指定使用lucene索引和Sitecore(新方法)索引哪些字段 例如,我只想索引字段“title”和“text”。似乎有一个IndexAllField参数可以设置为False,但如何设置需要索引的字段 我正在使用Sitecore.Search.Crawlers.DatabaseCrawler。您正在使用吗?如果是这样的话,可以添加一些部分,通过它们的guid包括特定字段,并通过它们的guid排除特定字段。下面我提供了一个片段,其中节点的提示属性定义了字段应该包括还是排除 <maste

如何指定使用lucene索引和Sitecore(新方法)索引哪些字段

例如,我只想索引字段“title”和“text”。似乎有一个IndexAllField参数可以设置为False,但如何设置需要索引的字段

我正在使用Sitecore.Search.Crawlers.DatabaseCrawler。

您正在使用吗?如果是这样的话,可以添加一些部分,通过它们的guid包括特定字段,并通过它们的guid排除特定字段。下面我提供了一个片段,其中
节点的提示属性定义了字段应该包括还是排除

<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>

主人
/网站核心/内容
假的
{8CDC337E-A112-42FB-BBB4-4143751E123F}
{8CDC337E-A112-42FB-BBB4-4143751E123F}
{D3AE7222-425D-4B77-95D8-EE33AC2B6730}
{DEC8D2D5-E3CF-48B6-A653-8E69E2716641}
{F1A1FE9E-A60C-4DDB-A3A0-BB5B29FE732E}

您可以在SVN上看到。

如果您使用的是标准Sitecore数据库爬虫,我建议您创建一个自定义爬虫,该爬虫继承自Sitecore数据库爬虫,然后覆盖AddAllFieldsMethod。然后只需将索引配置为使用自定义爬虫

您可以查看Advanced Database Crawler的源代码,以了解如何实现这一点。类似这样的内容:(注意,这还没有经过测试)

公共类DatabaseCrawler:Sitecore.Search.Crawlers.DatabaseCrawler
{
受保护的覆盖void AddAllFields(Lucene.Net.Documents.Document文档、Sitecore.Data.Items.Item项、bool versionSpecific)
{
if(索引字段)
{
base.AddAllFields(文档、项、版本特定);
}
其他的
{
var fieldsToIndex=new List(){“title”,“Text”};
foreach(fieldsToIndex中的var字段)
{ 
var scField=项目字段[字段];
添加(新LuceneField(scField.Key,scField.Value,LuceneField.Store.NO,LuceneField.Index.UN_标记化));
}
}
}
}

谢谢Mark,但我没有使用高级数据库爬虫。我正在使用常规的Sitecore.Search.Crawlers.DatabaseCrawler。有办法做到这一点吗?
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));
            }
        }
    }
}