【发布时间】:2017-08-11 11:29:56
【问题描述】:
我们使用 Nest 5.5.0 和属性映射在 Elasticsearch 中创建索引。作为我们某些属性的一部分,我们正在使用自定义 JsonConverters。
我们正在从 1.7.3 迁移,该映射已正确处理。升级后,我们可以在映射中看到它已经映射了字段,没有使用转换器。当我们然后索引一个文档时,转换器被使用并且索引操作失败。
例子:
Nest 和 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 和 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 属性?
【问题讨论】:
标签: c# elasticsearch nest