You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:37:02