我们使用Nest 5.5.0和属性映射在Elasticsearch中创建索引。作为我们的一些属性的一部分,我们使用自定义JsonConverters。
我们正在从1.7.3迁移,正确处理此映射。升级后,我们可以在映射中看到它已映射字段而不使用转换器。然后,当我们索引文档时,使用转换器并且索引操作失败。
示例:
Nest and Elasticsearch 1.7.3
// code
public class MyItem
{
[JsonProperty("start")]
[JsonConverter(typeof(LocalTimeConverter))]
public LocalTime Start { get; set; }
}
// index creation
elasticClient.CreateIndex("indexname", d => d.AddMapping<MyItem>(m => m.MapFromAttributes()))
// generated mapping (mapped as how the JsonConverter would output it)
"myitem": {
"start": {
"type": "string"
}
}
Nest and Elasticsearch 5.5.0
// code
public class MyItem
{
[JsonProperty("start")]
[JsonConverter(typeof(LocalTimeConverter))]
public LocalTime Start { get; set; }
}
// index creation
elasticClient.CreateIndexAsync(IndexName<T>(), d => d.Mappings(m => m.Map<MyItem>(mm => mm.AutoMap())));
// generated mapping (essentially a serialized version of the class)
"myitem": {
"properties": {
"clockHourOfHalfDay": { "type": "integer"},
...
...
"hour": {"type": "integer" }
}
注意:
- LocalTime是NodaTime库中的一个类
- 自定义
LocalTimeConverter
获取LocalTime并输出字符串
如何在生成映射时强制Nest 5.5.0考虑JsonConverter属性?