我想从名为“userprofiles”的索引中的文档中检索嵌套对象。
我的用户配置文件模型:
公共(public)类 UserProfileModel
{
public string FullName { get; set; }
public string Oid { get; set; }
public string Upn { get; set; }
public List<SsoLink> FavoriteSsoLinks { get; set; } = new List<SsoLink>();
}
我的 SsoLink 模型:
public class SsoLink
{
public string Id { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public string Owner { get; set; }
}
索引创建:
PUT userprofiles
{
"mappings" : {
"properties" : {
"FavoriteSsoLinks" : {
"type" : "object"
}
}
}
}
我的查询:
var searchResponse = _client.Search<UserProfileModel>(s => s
.Index(_profileIndex)
.Query(q=>q
.Term(t => t.Field(t => t.Oid).Value(oid)
)
)
);
现在它返回文档,但是 favoritelinks 对象是空白的,但是我看到 Kibana 列出的对象。我一定遗漏了一些明显的东西,但很难弄清楚这一点。
这是我的数据示例:
最佳答案
索引创建示例使用 "FavoriteSsoLinks"
作为属性,但 Kibana 屏幕截图使用 "favoriteSsoLinks"
以小写 f
开头- 哪个是对的?我的怀疑是属性大小写可能是问题,但需要查看索引中的映射才能知道这是否正确。
7.x 客户端对 JSON 中的属性名大小写有严格要求,默认情况下使用驼峰式属性名来匹配 POCO 属性名。例如,默认情况下
"favoriteSsoLinks"
在 JSON 中将 做个匹配对于 FavoriteSsoLinks
POCO房产 "FavoriteSsoLinks"
在 JSON 中将 不匹配对于 FavoriteSsoLinks
POCO房产 可以使用
DefaultFieldNameInferrer(Func<string, string>)
更改此行为。在 ConnectionSettings
用于所有属性,或在逐个属性的基础上使用属性的属性,例如 DataMemberAttribute
或 PropertyNameAttribute
, 或使用 DefaultMappingFor<T>
在哪里 T
是 POCO 类型。
关于c# - Elasticsearch NEST 查询嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61434609/