ElasticSearch 8.15 C# Client无法正确转换Kibana Terms查询
Elasticsearch 8.15 C#客户端Terms查询参数传递问题
问题场景
在Kibana中可正常运行的Terms查询语句:
GET product_it/_search { "query": { "bool": { "filter": { "terms": { "slug": ["slug1", "slug2"] } } } } }
但使用Elasticsearch 8.15的C#客户端转换时,无法正确传入slug字符串列表参数,现有代码片段:
var result = await Client.SearchAsync<Product>(s => s .Index(idsIndex) .Query(q => q.Bool(t => t.Filter(f => f.Terms())), cancellationToken);
解决方案
要正确传递slug列表参数,需在Terms()方法中明确指定目标字段和对应的列表值,以下是两种常用实现方式:
1. 强类型字段引用(推荐,支持编译时字段校验)
// 定义要过滤的slug列表 var targetSlugs = new List<string> { "slug1", "slug2" }; var result = await Client.SearchAsync<Product>(s => s .Index(idsIndex) .Query(q => q.Bool(t => t.Filter(f => f.Terms(term => term .Field(p => p.Slug) // 强类型关联Product类的Slug属性 .Terms(targetSlugs))))) , cancellationToken);
2. 字符串字段名写法
var targetSlugs = new List<string> { "slug1", "slug2" }; var result = await Client.SearchAsync<Product>(s => s .Index(idsIndex) .Query(q => q.Bool(t => t.Filter(f => f.Terms("slug", targetSlugs)))) , cancellationToken);
说明
原代码中f.Terms()未传入任何参数,因此无法生成符合预期的Terms查询结构。通过上述两种方式指定字段和值列表后,C#客户端会生成与Kibana中一致的查询语句,实现根据slug列表过滤文档的需求。
内容的提问来源于stack exchange,提问作者P_R
相关产品推荐
相关产品推荐

