如何在Sitecore的SOLR索引中获取选中下拉项的全部字段与值
解决Sitecore自定义索引中关联下拉字段仅返回ID的问题
要让SOLR查询返回CategoryItem的dd1、dd2下拉字段关联项的完整字段值,按以下步骤操作:
1. 修改索引配置的字段映射
找到你的自定义索引配置文件(一般在App_Config/Include目录下的自定义.config文件),定位到fieldMap节点,给dd1、dd2字段配置Lookup类型的映射,指定需要返回的关联项字段:
<fieldMap type="Sitecore.ContentSearch.FieldMap, Sitecore.ContentSearch"> <fieldNames hint="raw:AddFieldByFieldName"> <!-- 配置dd1字段,返回关联项的指定字段 --> <field fieldName="dd1" returnType="string" type="Sitecore.ContentSearch.ComputedFields.LookupField, Sitecore.ContentSearch"> <param desc="fieldName">dd1</param> <param desc="returnFields">FieldName1,FieldName2,FieldName3</param> <!-- 替换为你实际需要的关联项字段名 --> </field> <!-- 配置dd2字段,返回关联项的指定字段 --> <field fieldName="dd2" returnType="string" type="Sitecore.ContentSearch.ComputedFields.LookupField, Sitecore.ContentSearch"> <param desc="fieldName">dd2</param> <param desc="returnFields">FieldNameA,FieldNameB,FieldNameC</param> <!-- 替换为你实际需要的关联项字段名 --> </field> </fieldNames> </fieldMap>
2. 自定义计算字段(按需使用)
如果LookupField无法满足复杂需求(比如需要结构化数据),可以自定义计算字段类:
using Sitecore.ContentSearch; using Sitecore.ContentSearch.ComputedFields; using Sitecore.Data.Items; using Newtonsoft.Json; using System.Collections.Generic; namespace YourProjectNamespace { public class CustomLookupField : IComputedIndexField { public string FieldName { get; set; } public string ReturnType { get; set; } public string TargetFields { get; set; } // 逗号分隔的关联项字段名 public object ComputeFieldValue(IIndexable indexable) { var item = indexable as SitecoreIndexableItem; if (item == null) return null; var linkField = item.Fields[FieldName]; if (linkField == null || !linkField.ContainsLink) return null; var targetItem = Sitecore.Context.Database.GetItem(linkField.TargetID); if (targetItem == null) return null; var fieldValues = new Dictionary<string, object>(); foreach (var fieldName in TargetFields.Split(',')) { var trimmedFieldName = fieldName.Trim(); var targetField = targetItem.Fields[trimmedFieldName]; if (targetField != null) { fieldValues[trimmedFieldName] = targetField.Value; } } return JsonConvert.SerializeObject(fieldValues); // 序列化为JSON字符串存储 } } }
然后在索引配置中注册这个自定义字段:
<field fieldName="dd1" returnType="string" type="YourProjectNamespace.CustomLookupField, YourProjectAssembly"> <param desc="fieldName">dd1</param> <param desc="targetFields">FieldName1,FieldName2</param> </field>
3. 重建自定义索引
登录Sitecore后台,进入控制面板 > 索引 > 索引管理器,找到你的自定义索引,点击重建,等待索引重建完成。
4. 验证结果
重新查询SOLR,检查dd1、dd2字段是否已返回关联项的完整字段值。
注意事项:
- 确保关联项的目标字段在Sitecore中设置为可索引(字段的“Indexable”属性设为Yes)。
- 如果使用JSON格式存储,应用端可以反序列化为对象来解析字段值。
内容的提问来源于stack exchange,提问作者Shailesh Sahu
相关产品推荐
相关产品推荐

