1
我们使用Nest 5.5.0和属性映射在Elasticsearch中创建索引。作为我们一些属性的一部分,我们使用自定义的JsonConverters。NEST 5.5属性映射和自定义JsonConverter不起作用
我们正在从1.7.3进行迁移,其中正确处理了此映射。升级后,我们可以在映射中看到它已经映射了字段而不使用转换器。当我们索引文档时,会使用转换器并且索引操作失败。
实施例:
巢和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"
}
}
巢和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" }
}
NOTES:
- 本地时间我■从NodaTime库一类
- 我产生映射时自定义
LocalTimeConverter
采取本地时间和输出一个字符串
我怎么能强迫巢5.5.0考虑到了JsonConverter属性?
谢谢!这确实有效。如果房产是'List',你会怎么做?我想将它映射为字符串列表,而不是对象列表。 –
Kenneth
你可以用同样的方法来映射它。 Elasticsearch不区分属性的单个值或同一类型的多个值。 –