您可以添加一个计算字段。 这是约翰韦斯特关于它的帖子。 下面是一个仅获取图像 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 似乎正在为每个计算字段创建单独的类,并使用继承来获得重用。