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
相关产品推荐
相关产品推荐

