我创建了一个索引字段来获取/索引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或图片标记,但我不知道该怎么做..
任何帮助将不胜感激。
答案 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中做类似的事情。