2013-10-25 2 views
1

Я создал поле индекса, чтобы получить/индексировать поле изображения из элемента в Sitecore. Однако индекс возвращает альтернативный текст изображения, но это не очень полезно ..Sitecore Index для типа изображения

Я пытался добавить эту строку в конфигурации индекса Lucene

<field fieldName="restaurant_image" storageType="YES" indexType="TOKENIZED"   vectorType="NO" boost="1f" type="System.String" settingType="Sitecore.ContentSearch.LuceneProvider.LuceneSearchFieldConfiguration, Sitecore.ContentSearch.LuceneProvider" /> 

Мне нужно, чтобы получить путь изображения , или Идентификатор изображения или тег изображения, но я не знаю, как это сделать.

любая помощь будет оценена.

+1

Какая версия Sitecore? Это определит, является ли это динамическим полем или вычисленным полем. –

ответ

0

, пожалуйста, проверьте это link. В этом сообщении описывается, как поставщик поиска определяет точные значения, которые индексируются.

0

Я сделал что-то подобное, используя scSearchContrib в 6.6.

Создан динамическое поле, чтобы получить URL-адрес картинки

public class ImageUrlField : BaseDynamicField 
    { 
     public override string ResolveValue(Item item) 
     { 
       FileField fileField = item.Fields["Image"]; 

       var url = StringUtil.EnsurePrefix('/', MediaManager.GetMediaUrl(fileField.MediaItem)); 

       return url;    
     } 
    } 

Реферированы в конфигурационном файле, как: -

<dynamicField type="[NAMESPACE].ImageUrlField, [DLL]" name="image url" storageType="YES" indexType="UN_TOKENIZED" vectorType="NO" boost="1f" />  

Вы должны быть в состоянии сделать что-то подобное в 7.0.

+0

это может мне помочь, но я все еще смущен. в моем классе, который обрабатывает шаблон, я создал индекс следующим образом: [IndexField ("restaurant_image")] public string RestaurantImage {get; задавать; } и в DefaultIndexConfig я добавил эту строку: если я напишу restaurant.RestaurantImage, я получаю альтернативный текст .. –

2

Вы можете добавить вычисленное поле. Here is John West's post about it. Ниже приведен сжатый пример, чтобы получить только URL-адрес изображения.

Создайте класс, который реализует Sitecore.ContentSearch.ComputedFields.IComputedIndexField.

public class ImageIndexField : IComputedIndexField 
{ 
    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["MyImageField"]; 

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

Затем добавьте конфигурации включают в себя что-то вроде этого:

<sitecore> 
    <contentSearch> 
     <configuration type="Sitecore.ContentSearch.LuceneProvider.LuceneSearchConfiguration, Sitecore.ContentSearch.LuceneProvider"> 
      <defaultIndexConfiguration type="Sitecore.ContentSearch.LuceneProvider.LuceneIndexConfiguration, Sitecore.ContentSearch.LuceneProvider"> 
       <fields hint="raw:AddComputedIndexField"> 
        <field fieldName="MyImageFieldUrl" storageType="YES" indexType="TOKENIZED">sc70.Search.ComputedFields.ImageUrlIndexField, sc70</field> 
       </fields> 
      </defaultIndexConfiguration> 
     </configuration> 
    </contentSearch> 
</sitecore> 

Обратите внимание, что имя поля закодирована выше. Я не уверен, можно ли передать это как параметр из config. Кажется, что Sitecore создает отдельные классы для каждого из их вычисленных полей и использует наследование для повторного использования.

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

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