首页 > 解决方案 > Sitecore - 使用 Solr 索引中的 ContentSearchManager 时不映射索引字段

问题描述

问题:

无法将生日(任何 -- 见附件)字段映射到 C# 模型。全部出现为null(使用时returnType="string")或01/01/0001(使用时returnType="datetime"

在此处输入图像描述

我正在使用sitecore_analytics_index获取 EXM 联系人的搜索结果。查看 Solr 索引时(通过 localhost:8984/solr),我可以清楚地看到字段。

dateofbirth当查看从搜索索引返回的列表中的对象时,contact.dateofbirth我可以在Fields集合中看到。BirthdaySearchResultItem

我能够正确contact.tags_sm地映射contact.contactid

public class BirthdaySearchResultItem : SearchResultItem, IObjectIndexers
{
    [IndexField("contact.tags_sm")]
    public string[] ContactList { get; set; } // maps correctly

    [DataMember]
    [IndexField("contact.contactid")]
    public virtual Guid ContactId { get; set; } // maps correctly

    [DataMember]
    [IndexField("contact.dateofbirth")]
    public virtual DateTime BirthDay { get; set; } // have tried using "string"

    [DataMember]
    [IndexField("dateofbirth")]
    public virtual DateTime BirthDay1 { get; set; } // have tried using "string"

    [DataMember]
    [IndexField("contact.dateofbirth_t")]
    public virtual DateTime BirthDay2 { get; set; } // have tried using "string"

    [DataMember]
    [IndexField("contact.dateofbirth_t_en")]
    public virtual DateTime BirthDay3 { get; set; } // have tried using "string"

    [DataMember]
    [IndexField("birthday")]
    public virtual DateTime BirthDay4 { get; set; } // have tried using "string"
}

      <index id="sitecore_analytics_index">
        <configuration ref="contentSearch/indexConfigurations/defaultSolrIndexConfiguration">
          <fieldMap>
            <fieldNames hint="raw:AddFieldByFieldName">
              <field fieldName="contact.contactid"                     returnType="guid"/>
              <field fieldName="contact.dateofbirth"                   returnType="datetime"/>  <!-- have tried "string" as well -->
              <field fieldName="dateofbirth"                           returnType="datetime" />
              <field fieldName="contact.dateofbirth_t"                 returnType="datetime" />
              <field fieldName="contact.dateofbirth_t_en"              returnType="datetime" />

.... omitted for brevity

        var indexName = "sitecore_analytics_index";
        var index = ContentSearchManager.GetIndex(indexName);

        using (var context = index.CreateSearchContext())  //IContactDetailFacet
        {
            var predicate = PredicateBuilder.True<BirthdaySearchResultItem>();
            var test = context.GetQueryable<BirthdaySearchResultItem>().ToList();

        }

标签: c#solrsitecore

解决方案


根据您的数据示例,我可以看到您使用前导“/”而不是“-”,这很重要,因为 Solr 使用 ISO 日期格式,请参见此处。因此,我建议您先将 format 属性添加到您的索引定义中,例如:

<field fieldName="contact.dateofbirth"   returnType="datetime"   format="yyyy-MM-dd'T'HH:mm:ss'Z'" />

然后在您的模型中使用Sitecore.DateUtil.IsoDateToDateTime()方法将 ISO 格式的日期字符串转换为 DateTime 类。


推荐阅读