我有一個名爲Terms的計算字段。該字段將Sitecore將multilist字段存儲的guid值列表讀取爲逗號分隔的字符串值。當我觸發索引重建並設置斷點時,我可以看到代碼按預期執行任務,但由於某種原因,在索引中,該值仍然以guid字符串數組形式存儲。我不知道斷開連接的位置。自定義Sitecore Solr索引計算字段返回錯誤值
檢查的Solr以及配置查詢返回的XML,我可以看到的條款場被存儲,像這樣:
<arr name="terms_t">
<str>b7ba58ef002b4554808a1d423ca574d8</str>
<str>95680bf346d142aeb0d8f189300ea3f2</str>
</arr>
下面你可以看到用於填充計算字段
namespace ASHPEngine.ComputedFields
{
public class Terms : Sitecore.ContentSearch.ComputedFields.IComputedIndexField
{
public object ComputeFieldValue(IIndexable indexable)
{
Assert.ArgumentNotNull(indexable, "indexable");
var scIndexable = indexable as Sitecore.ContentSearch.SitecoreIndexableItem;
if (scIndexable == null)
{
return false;
}
if (String.Compare(scIndexable.Item.Database.Name, "core", System.StringComparison.OrdinalIgnoreCase) == 0)
{
return false;
}
if (!scIndexable.Item.InheritsFrom(IBaseArticleConstants.TemplateName)) return String.Empty;
var termsField = scIndexable.GetFieldByName(INewsConstants.TermsFieldName);
{
var retval = new StringBuilder();
var terms = termsField.Value.ToString().Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries).ToList();
foreach (var id in terms)
{
var termItem = scIndexable.Item.Database.GetItem(new ID(id));
retval.Append(termItem.Name + ", ");
}
return retval.Length > 0 ? retval.Remove(retval.Length-2, 2).ToString() : string.Empty;
}
}
public string FieldName { get; set; }
public string ReturnType { get; set; }
}
類
並且配置:
<configuration>
<sitecore>
<contentSearch>
<configuration type="Sitecore.ContentSearch.ContentSearchConfiguration, Sitecore.ContentSearch">
<indexes hint="list:AddIndex">
<index id="news" type="Sitecore.ContentSearch.SolrProvider.SolrSearchIndex, Sitecore.ContentSearch.SolrProvider">
<param desc="name">$(id)</param>
<param desc="folder">$(id)</param>
<!-- This initializes index property store. Id has to be set to the index id -->
<param desc="propertyStore" ref="contentSearch/indexConfigurations/databasePropertyStore" param1="$(id)" />
<configuration ref="contentSearch/indexConfigurations/defaultSolrIndexConfiguration">
<fieldMap ref="contentSearch/indexConfigurations/defaultSolrIndexConfiguration/fieldMap">
<fieldNames hint="raw:AddFieldByFieldName">
<field fieldName="_uniqueid" returnType="string" />
<field fieldName="article" returnType="string" />
<field fieldName="author" returnType="string"/>
<field fieldName="author credentials" returnType="string" />
<field fieldName="date" returnType="datetime" format="yyyy-MM-dd'T'HH:mm:ss'Z'" />
<field fieldName="degree" returnType="string" />
<field fieldName="graduation year" returnType="string" />
<field fieldName="location" returnType="string" />
<field fieldName="navigation title" returnType="string" />
<field fieldName="page abstract" returnType="string" />
<field fieldName="school" returnType="string" />
<field fieldName="text" returnType="string" />
<field fieldName="value" returnType="string" />
</fieldNames>
</fieldMap>
<documentOptions ref="contentSearch/indexConfigurations/defaultSolrIndexConfiguration/documentOptions">
<fields hint="raw:AddComputedIndexField">
<field fieldName="external_link" returnType="text">mydll.ComputedFields.ExternalLink, mydll</field>
<field fieldName="image" returnType="text">mydll.ComputedFields.Image, mydll</field>
<field fieldName="terms" returnType="text">mydll.ComputedFields.Terms, mydll</field>
<field fieldName="url" returnType="text">mydll.ComputedFields.Url, mydll</field>
<field fieldName="parentname" returnType="text">mydll.ComputedFields.ParentName, mydll</field>
</fields>
</documentOptions>
</configuration>
<strategies hint="list:AddStrategy">
<!-- NOTE: order of these is controls the execution order -->
<strategy ref="contentSearch/indexConfigurations/indexUpdateStrategies/onPublishEndAsync" />
</strategies>
<locations hint="list:AddCrawler">
<crawler type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
<Database>web</Database>
<Root>/sitecore/content</Root>
</crawler>
</locations>
<enableItemLanguageFallback>false</enableItemLanguageFallback>
<enableFieldLanguageFallback>false</enableFieldLanguageFallback>
</index>
</indexes>
</configuration>
</contentSearch>
</sitecore>
</configuration>
這很酷:) –