c# - Elasticsearch NEST 查询嵌套对象

标签 c# elasticsearch nest elasticsearch-query

我想从名为“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 列出的对象。我一定遗漏了一些明显的东西,但很难弄清楚这一点。

这是我的数据示例:

enter image description here

最佳答案

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

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

  • "favoriteSsoLinks"在 JSON 中将 做个匹配对于 FavoriteSsoLinks POCO房产
  • "FavoriteSsoLinks"在 JSON 中将 不匹配对于 FavoriteSsoLinks POCO房产

  • 可以使用 DefaultFieldNameInferrer(Func<string, string>) 更改此行为。在 ConnectionSettings用于所有属性,或在逐个属性的基础上使用属性的属性,例如 DataMemberAttributePropertyNameAttribute , 或使用 DefaultMappingFor<T>在哪里 T是 POCO 类型。

    关于c# - Elasticsearch NEST 查询嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61434609/

    相关文章:

    c# - 我如何将日期时间转换为特定的自定义格式?

    elasticsearch - 在Kibana Discover中使用Elastic Query DSL启用more_like_this等

    c# - NEST中的NOT LIKE查询

    ElasticSearch NEST 弹性客户端生命周期

    elasticsearch - 模糊度超过2个字符的 Elasticsearch (距离)

    c# - 多个读者更快地阅读文件

    c# - 在 C# 窗体中将密码存储更改为哈希存储

    elasticsearch - 查询键的值至少为某个数字的elasticsearch

    spring - Spring Data Elasticsearch-如何暂停刷新?

    c# - 使用 Onedrive for Business 时的文件路径