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

时间:2011-09-30 19:50:59

标签: sitecore

如何使用Sitecore(新方法)使用lucene索引指定要索引的字段?例如,我只想索引字段'title'和'text'。似乎有一个IndexAllField参数可以设置为False但是如何设置哪个字段需要被索引?

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

谢谢

2 个答案:

答案 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));
            }
        }
    }
}