c# - Sitecore - 使用 Solr 索引中的 ContentSearchManager 时不映射索引字段
问题描述
- 站点核心 8.2.6
- 索尔 6.6.2
问题:
无法将生日(任何 -- 见附件)字段映射到 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();
}
解决方案
根据您的数据示例,我可以看到您使用前导“/”而不是“-”,这很重要,因为 Solr 使用 ISO 日期格式,请参见此处。因此,我建议您先将 format 属性添加到您的索引定义中,例如:
<field fieldName="contact.dateofbirth" returnType="datetime" format="yyyy-MM-dd'T'HH:mm:ss'Z'" />
然后在您的模型中使用Sitecore.DateUtil.IsoDateToDateTime()
方法将 ISO 格式的日期字符串转换为 DateTime 类。
推荐阅读
- python - 在mac上使用crontab运行python脚本时出错
- javascript - 我希望这个大红色 div 像一条线一样从其原始和固定位置跟随我的自定义光标
- javascript - Boostrap 5 手风琴没有崩溃
- angular - 将库导入另一个库时“同步和异步加载角结构”
- node.js - 找不到模块“sanitize.css/page.css”
- php - 如何从 excel 文件中加载数据然后在 Laravel 中提交?
- javascript - 从网站接收数据然后触发 lambda 发送电子邮件和备份到 DynamoDB
- python - 运行命令时将数据添加到 json 文件 discord.py
- excel - 行 VBA Excel 的范围
- javascript - 在不返回任何内容的 JavaScript 函数中是否需要返回