我想从我的索引中的文档中检索嵌套对象,即“用户配置文件”。
我的用户个人资料模型:
公共类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"
POCO属性,<< [JSON中的FavoriteSsoLinks
将"FavoriteSsoLinks"
POCO属性,<< [JSON中的FavoriteSsoLinks
将不是匹配项] >>DefaultFieldNameInferrer(Func<string, string>)
上的ConnectionSettings
来更改所有属性,或使用DataMemberAttribute
或PropertyNameAttribute
等属性的属性,或使用DefaultMappingFor<T>
其中T
为POCO类型。