You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elastic.Clients.Elasticsearch创建索引:嵌套属性配置问题

Elastic.Clients.Elasticsearch v8.13.7 嵌套集合索引流畅配置方案

在配置嵌套集合的索引映射时,默认上下文绑定的是父文档类型(ShopArticleDoc),导致无法直接配置集合项类型(ArticleDoc)的属性。可以通过以下两种流畅API方式解决:

方案1:使用OfType<TNested>切换类型

在Properties中通过OfType显式指定嵌套对象类型,即可针对ArticleDoc配置字段:

public class ShopArticleDoc
{
    // 其他字段...
    public List<ArticleDoc> Articles { get; set; } = new();
}

public class ArticleDoc
{
    public string ArticleId { get; set; }
    public string ArticleTitle { get; set; }
    // 其他字段...
}

// 创建索引请求
var response = await client.Indices.CreateAsync<ShopArticleDoc>(indexName, c =>
    c.Mappings(map =>
        map.Properties(p =>
            p.Nested(x => x.Articles, cc =>
                cc.Properties(pp => pp
                    .OfType<ArticleDoc>(articleProps =>
                        articleProps
                            .Keyword(k => k.Name(n => n.ArticleId))
                            .Text(t => t.Name(n => n.ArticleTitle))
                    )
                )
            )
        )
    )
);

方案2:使用泛型重载Properties<TNested>

直接调用泛型版本的Properties方法,传入ArticleDoc作为类型参数,此时上下文自动切换为ArticleDoc的属性描述器:

var response = await client.Indices.CreateAsync<ShopArticleDoc>(indexName, c =>
    c.Mappings(map =>
        map.Properties(p =>
            p.Nested(x => x.Articles, cc =>
                cc.Properties<ArticleDoc>(articleProps =>
                    articleProps
                        .Keyword(k => k.Name(n => n.ArticleId))
                        .Text(t => t.Name(n => n.ArticleTitle))
                )
            )
        )
    )
);

简化配置(自动映射)

如果不需要自定义字段规则,可结合AutoMap快速生成嵌套类型的映射:

cc.Properties<ArticleDoc>(articleProps => articleProps.AutoMap())

内容的提问来源于stack exchange,提问作者Yehor Androsov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:42:21