1

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

我试图在 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 或图像标签,但我不知道如何执行此操作..

任何帮助,将不胜感激。

4

2 回答 2

2

您可以添加一个计算字段。 这是约翰韦斯特关于它的帖子。 下面是一个仅获取图像 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>

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

于 2013-10-25T16:18:26.707 回答
0

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

创建了一个动态字段来获取图像 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 中执行类似的操作。

于 2013-10-25T12:25:08.230 回答