2016-03-07 8 views
1

Зашел в этот выпуск на днях, но еще не нашел ничего (от googling), который решает эту проблему.Sitecore 8.1 вычисленное поле индекса для индексации только изображения alt text on solr

Я использую Solr как мой двигатель индексации. Я пытаюсь проиндексировать изображение в моем шаблоне. Индексирование работает нормально, но не индексирует медиа-URL (который я возвращаю из своего кода), вместо этого он индексирует текст ALT изображения. Если текст ALT отсутствует только тогда, он индексирует медиа-URL. У меня есть моя конфигурация индекса в отдельном файле.

Я думаю, что нижняя строка в файле Sitecore.ContentSearch.Solr.DefaultIndexConfiguration.config по умолчанию, вероятно, возится с моей конфигурацией. Но как переписать это только для поля «main_image».

<fieldReader fieldTypeName="image" fieldReaderType="Sitecore.ContentSearch.FieldReaders.ImageFieldReader, Sitecore.ContentSearch" /> 

Ниже, как моя конфигурация выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/"> 
    <sitecore> 
    <myindex> 
     <indexConfigurations> 
     <mySolrIndexConfiguration ref="contentSearch/indexConfigurations/defaultSolrIndexConfiguration"> 
      <fields hint="raw:AddComputedIndexField"> 
       <field fieldName="main_image" returnType="text">My.Indexing.Namespace.MyMainImageIndexing,My.Indexing</field> 
       <field fieldName="thumbnail" returnType="text">My.Indexing.Namespace.MyThumbnailIndexing,My.Indexing</field> 
      </fields> 
     </mySolrIndexConfiguration> 
     </indexConfigurations> 
    </myindex> 
    </sitecore> 
</configuration> 

Одна из реализаций выглядит, как показано ниже (другой похож)

public class MyMainImageIndexing : IComputedIndexField 
{ 
    public string Parameters { get; set; } 
    public string FieldName { get; set; } 
    public string ReturnType { get; set; } 

    public object ComputeFieldValue(IIndexable indexable) 
    { 
     Assert.ArgumentNotNull(indexable, "indexable"); 
     var indexableItem = indexable as SitecoreIndexableItem; 

     if (indexableItem == null) 
     { 
      Log.Warn(string.Format("{0} : unsupported IIndexable type : {1}", this, indexable.GetType()), this); 
      return null; 
     } 

     ImageField img = indexableItem.Item.Fields["Main Image"]; 

     return (img == null || img.MediaItem == null) ? null : MediaManager.GetMediaUrl(img.MediaItem); 
    } 
} 

Может кто-нибудь, пожалуйста, пролить некоторый свет здесь о том, как решить эту проблему.

Заранее спасибо.

P.S> Я видел пост Джона Уэста здесь http://www.sitecore.net/de-de/learn/blogs/technical-blogs/john-west-sitecore-blog/posts/2013/05/sitecore-7-pre-render-image-fields.aspx

ответ

4

Ваш код выглядит совершенно нормально. У вас есть ошибка в вашей конфигурации.

Вы установили returnType своих полей в text, что означает, что Solr будет tokenize этих полей. Это означает, что Solr не будет сохранять значения как одну строку, вместо этого он будет создавать токены, которые позволят полнотекстовый поиск в будущем.

Вы должны изменить конфигурацию

<field fieldName="main_image" returnType="string">... 

После переиндексации, Solr будет держать целое значение в виде одной строки.

Также вы должны знать, что если вы переименуете элемент мультимедиа, Solr будет иметь устаревшие URL-адреса, и он не будет автоматически перестраивать все ссылочные документы.

 Смежные вопросы

  • Нет связанных вопросов^_^