Elasticsearch NEST查询嵌套对象

问题描述 投票:0回答:1

我想从我的索引中的文档中检索嵌套对象,即“用户配置文件”。

我的用户个人资料模型:

公共类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中列出的对象。我肯定想念一些明显的东西,但是很难弄清楚。

这是我的数据的示例:

enter image description here

c# elasticsearch nest elasticsearch-query
1个回答
0
投票

索引创建示例使用"FavoriteSsoLinks"作为属性,但是Kibana屏幕截图使用以小写"favoriteSsoLinks"开头的f-正确吗?我怀疑属性框可能是问题,但需要查看索引中的映射才能知道这是否正确。

7.x客户端对JSON中的属性名称大小写严格,默认情况下使用驼峰式属性名称来匹配POCO属性名称。例如,默认情况下

    对于"favoriteSsoLinks" POCO属性,<< [JSON中的FavoriteSsoLinks
  • 是匹配项] >>对于"FavoriteSsoLinks" POCO属性,<< [JSON中的FavoriteSsoLinks不是匹配项] >>
  • [行为可以通过DefaultFieldNameInferrer(Func<string, string>)上的ConnectionSettings来更改所有属性,或使用DataMemberAttributePropertyNameAttribute等属性的属性,或使用DefaultMappingFor<T>其中T为POCO类型。
© www.soinside.com 2019 - 2024. All rights reserved.