Nest总是将我的弹性索引中的一个字段反序列化为null。我正在使用的索引具有以下结构:
"myIndex": {
"myMapping": {
"name": {default properties},
"guid": {"type": "keyword"},
"myDisabledField": {
"type": "object",
"enabled": false
}
}
}
当我尝试使用Nest 6.x对该索引进行搜索时,它总是将“ myDisabledField”返回为null。但是,如果我在kibana中发出相同的请求,它将在_source中显示“ myDisabledField”。例如,kibana查询:
GET myIndex/_search
{
"query": {
"query_string": {
"query": "sample query"
}
}
}
将返回以下内容:
{
"hits": [
{
"_index": "myIndex",
"_source": {
"name": "some_name",
"guid": "some_guid",
"myDisabledField": {
"field1": "value1",
"field2": "value2",
... etc
}
}
}
]
}
但是,C#/嵌套查询:
var result = _elasticClient.Search<T>(
s => s
.Query(
q => q
.QueryString(
qs => qs
.Query("sample query")
)
)
);
return result.Documents.ToList();
返回类似:
[
"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
答案 0 :(得分:0)
我发布的问题确实有效。原来,我在C#属性“ MyDisabledField”上缺少“设置者”。所以我有:
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对象的工作符合您的预期