图像类型的Sitecore索引

时间:2013-10-25 11:43:18

标签: image indexing lucene sitecore sitecore7

我创建了一个索引字段来获取/索引Sitecore中项目的Image字段。 但是,索引返回图像的Alternate文本,但这不是很有用..

我试图在Lucene索引配置中添加此行

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

我需要获取图片路径,图片ID或图片标记,但我不知道该怎么做..

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

您可以添加计算字段。 Here is John West's post about it.以下是一个精简示例,仅提供图片的网址。

创建一个实现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>

请注意,字段名称在上面是硬编码的。我不确定是否可以将其作为参数传递给配置。 Sitecore似乎为每个计算字段创建单独的类,并使用继承来重用。

答案 1 :(得分:0)

请检查此link。本文描述了搜索提供程序如何确定索引的精确值。

答案 2 :(得分:0)

我在6.6中使用scSearchContrib做了类似的事情。

创建动态字段以获取图片网址

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中做类似的事情。