Elasticsearch Nest 6 将对象 enabled=false 反序列化为 null

Elasticsearch Nest 6 deserializes object enabled=false as null

我的弹性索引中的一个字段总是被 Nest 反序列化为 null。我使用的索引具有以下结构:

"myIndex": {
    "myMapping": {
      "name": {default properties},
      "guid": {"type": "keyword"},
      "myDisabledField": {
        "type": "object",
        "enabled": false
      }
    }
 }

当我尝试使用 Nest 6.x 搜索此索引时,它总是 returns "myDisabledField" 为空。但是,如果我在 kibana 中发出相同的请求,它会在 _source 中显示 "myDisabledField"。比如kibana查询:

GET myIndex/_search
{
  "query": {
    "query_string": {
      "query": "sample query"
    }
  }
}

会 return 以下内容:

{
  "hits": [
    { 
      "_index": "myIndex",
      "_source": {
        "name": "some_name",
        "guid": "some_guid",
        "myDisabledField": {
          "field1": "value1",
          "field2": "value2",
          ... etc
        }
      }
    }
  ]
}

但是,C#/Nest 查询:

var result = _elasticClient.Search<T>(
  s => s
  .Query(
    q => q
    .QueryString(
      qs => qs
      .Query("sample query")
    )
  )
);

return result.Documents.ToList();

Returns 类似于:

[
  "MyObject": {
    "Name": "some_name",
    "Guid": "some_guid",
    "MyDisabledField": null
  }
]

"MyObject" 在这种情况下是我用来填充此索引的 POCO。我如何让 Nest 用存储在 _source 中的数据填充 "MyDisabledField"?是否需要某种设置来反序列化对象或设置为 enabled=false 的字段?

顺便说一下,我使用 DefaultMappingFor 连接设置映射到我的类型的正确索引。 This is the documentation on the enabled property I used

我发布的问题确实有效。事实证明,我在 "MyDisabledField" C# 属性 上遗漏了 "setter"。所以我有:

public class MyMapping{
  public string Name {get; set;}

  public string Guid {get; set;}

  public MyObject MyDisabledField {get; }
}

而不是:

public class MyMapping{
  public string Name {get; set;}

  public string Guid {get; set;}

  public MyObject MyDisabledField {get; set;}
}

瞎了一个下午。抱歉浪费了大家的时间。反序列化 enabled=false 对象的工作方式与您预期的一样