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 对象的工作方式与您预期的一样
我的弹性索引中的一个字段总是被 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 对象的工作方式与您预期的一样