Solr为Sitecore建立索引

问题描述:

我们已经在Sitecore中的每个项目下存储了不同的语言版本内容,我们需要为每种语言创建不同的索引,如果我们有意大利和法国版本的主页页面存储为 我们需要不同的为主页的其他语言版本的指标是有其i指数配置文件Solr为Sitecore建立索引

干杯 GA

+0

你指的是项目的不同语言版本?为什么你想为它们创建单独的索引?只需将您的上下文语言添加到查询中,您将只收到所选语言的搜索结果。 –

+0

是的不同版本的项目,因为我们的内容是巨大的每种语言和其他原因以及我们需要不同的索引每种语言 – user2332873

做,这是通过创建一个自定义的履带,下面的唯一途径的任何设置是配置了英语示例代码语言作为索引语言,我认为你可以从那里开始:

所有的信息可以在这里找到: https://ggullentops.blogspot.be/2016/10/custom-sitecore-index-crawler.html

private string indexLanguage; 

public string Language 
{ 
    get { return !string.IsNullOrEmpty(indexLanguage) ? indexLanguage : null; } 
    set { indexLanguage = value; } 
} 

protected override void DoAdd(IProviderUpdateContext context, SitecoreIndexableItem indexable) 
{ 
    Assert.ArgumentNotNull(context, "context"); 
    Assert.ArgumentNotNull(indexable, "indexable"); 
    using (new LanguageFallbackItemSwitcher(context.Index.EnableItemLanguageFallback)) 
    { 
    Index.Locator.GetInstance<IEvent>().RaiseEvent("indexing:adding", context.Index.Name, indexable.UniqueId, indexable.AbsolutePath); 
    if (!IsExcludedFromIndex(indexable, false)) 
    { 
     foreach (var language in indexable.Item.Languages) 
     { 
     // only include English 
     if (!language.Name.Equals(indexLanguage, StringComparison.OrdinalIgnoreCase)) 
     { 
      continue; 
     } 

     Item item; 
     using (new WriteCachesDisabler()) 
     { 
      item = indexable.Item.Database.GetItem(indexable.Item.ID, language, Version.Latest); 
     } 

     if (item == null) 
     { 
      CrawlingLog.Log.Warn(string.Format(CultureInfo.InvariantCulture, "SitecoreItemCrawler : AddItem : Could not build document data {0} - Latest version could not be found. Skipping.", indexable.Item.Uri)); 
     } 
     else 
     { 
      SitecoreIndexableItem sitecoreIndexableItem; 
      using (new WriteCachesDisabler()) 
      { 
      // only latest version 
      sitecoreIndexableItem = item.Versions.GetLatestVersion(); 
      } 

      if (sitecoreIndexableItem != null) 
      { 
      IIndexableBuiltinFields indexableBuiltinFields = sitecoreIndexableItem; 
      indexableBuiltinFields.IsLatestVersion = indexableBuiltinFields.Version == item.Version.Number; 
      sitecoreIndexableItem.IndexFieldStorageValueFormatter = context.Index.Configuration.IndexFieldStorageValueFormatter; 
      Operations.Add(sitecoreIndexableItem, context, index.Configuration); 
      } 
     } 
     } 
    } 

    Index.Locator.GetInstance<IEvent>().RaiseEvent("indexing:added", context.Index.Name, indexable.UniqueId, indexable.AbsolutePath); 
    } 
} 
+0

感谢您的更新我正在尝试这个,但这个customCrawler照顾更新和删除索引。 – user2332873

+0

在博客文章中,您也可以找到更新代码。 –

+0

我创建了自定义Sitecrawaler,并在索引配置中指定了它,但无法获得语言特定的索引,例如我无法获取特定于语言的索引。任何指针 – user2332873