Elasticsearch NEST 查询嵌套对象

Elasticsearch NEST query nested object

我想从名为 "userprofiles" 的索引中的文档中检索嵌套对象。

我的 UserProfile 模型:

public class 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)
                        )
                    )
                );

现在它 returns 文档,但是 favoritelinks 对象是空白的,但是我看到从 Kibana 列出的对象。我一定是遗漏了一些明显的东西,但很难弄清楚。

这是我的数据示例:

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

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

    JSON 中的
  • "favoriteSsoLinks"FavoriteSsoLinks POCO 属性
  • 匹配
  • "FavoriteSsoLinks" in JSON 将 FavoriteSsoLinks POCO 属性
  • 不匹配

此行为可以在 ConnectionSettings 上使用 DefaultFieldNameInferrer(Func<string, string>) 更改所有属性,或者在 属性 基础上 属性 使用 [=19] 等属性的属性=] 或 PropertyNameAttribute,或使用 DefaultMappingFor<T>,其中 T 是 POCO 类型。