前几天进入这个问题,但找不到任何解决此问题的内容(来自Google搜索)。
我使用Solr作为我的索引引擎。我正在尝试索引模板中的图像字段。索引工作正常,但它没有索引媒体URL(我从我的代码返回)而不是索引图像的ALT文本。如果ALT文本不存在,那么它将索引媒体URL。 我将索引配置放在一个单独的文件中。
我认为默认的Sitecore.ContentSearch.Solr.DefaultIndexConfiguration.config文件中的以下行可能正在搞乱我的配置。但是,如何仅为“main_image”字段覆盖此内容。
<fieldReader fieldTypeName="image" fieldReaderType="Sitecore.ContentSearch.FieldReaders.ImageFieldReader, Sitecore.ContentSearch" />
以下是我的配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<myindex>
<indexConfigurations>
<mySolrIndexConfiguration ref="contentSearch/indexConfigurations/defaultSolrIndexConfiguration">
<fields hint="raw:AddComputedIndexField">
<field fieldName="main_image" returnType="text">My.Indexing.Namespace.MyMainImageIndexing,My.Indexing</field>
<field fieldName="thumbnail" returnType="text">My.Indexing.Namespace.MyThumbnailIndexing,My.Indexing</field>
</fields>
</mySolrIndexConfiguration>
</indexConfigurations>
</myindex>
</sitecore>
</configuration>
其中一个实现如下(另一个类似)
public class MyMainImageIndexing : IComputedIndexField
{
public string Parameters { get; set; }
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["Main Image"];
return (img == null || img.MediaItem == null) ? null : MediaManager.GetMediaUrl(img.MediaItem);
}
}
有人可以在此解释一下如何解决这个问题。
提前致谢。
P.S&GT;我在这里见过John West的帖子http://www.sitecore.net/de-de/learn/blogs/technical-blogs/john-west-sitecore-blog/posts/2013/05/sitecore-7-pre-render-image-fields.aspx
答案 0 :(得分:4)
您的代码看起来很完美。您的配置中存在错误。
您将字段returnType
设置为text
,这意味着Solr会对这些字段进行标记。这意味着Solr不会将值保持为一个字符串,而是会创建令牌,以便将来进行全文搜索。
您应该将配置更改为
<field fieldName="main_image" returnType="string">...
重新索引后,Solr会将整个值保留为单个字符串。
此外,您应该知道,如果重命名媒体项,Solr将会有过时的网址,并且不会自动重建所有引用文档。