gpt4 book ai didi

c# - NEST 5.5属性映射和自定义JsonConverter不起作用

转载 作者:行者123 更新时间:2023-12-02 22:57:50 25 4
gpt4 key购买 nike

我们使用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" }
}

NOTES:

  • LocalTime is a class from the NodaTime library
  • The custom LocalTimeConverter takes the LocalTime and outputs a string


在生成映射时,如何强制Nest 5.5.0考虑JsonConverter属性?

最佳答案

可以将LocalTime映射为keyword类型(我认为这是您想要的类型,它不会被分析,但仍然可以被索引和搜索),您可以使用

public class MyItem
{
[JsonProperty("start")]
[JsonConverter(typeof(LocalTimeConverter))]
[Keyword]
public LocalTime Start { get; set; }
}

并按当前方式创建索引和映射。

如果您想默认使用NEST Camel 箱属性名称,也可以省略 JsonPropertyAttribute

这将产生映射
{
"mappings": {
"myitem": {
"properties": {
"start": {
"type": "keyword"
}
}
}
}
}

关于c# - NEST 5.5属性映射和自定义JsonConverter不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45634137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com