使用NEST重现Kibana生成的数据表可视化查询
用NEST重现Kibana的数据表可视化查询
没问题,我帮你把Kibana生成的这个嵌套聚合查询转换成NEST的实现代码。先把原始的Kibana查询格式化清晰,方便对照(注:原始查询末尾有截断,我假设是继续对某个字段做terms聚合,下面的NEST代码会按完整的层级逻辑实现):
{ "size": 0, "aggs": { "4": { "date_histogram": { "field": "BeginDate", "interval": "1d", "time_zone": "America/Phoenix", "min_doc_count": 1 }, "aggs": { "2": { "terms": { "field": "Application.keyword", "size": 5, "order": { "_term": "desc" } }, "aggs": { "3": { "terms": { "field": "Module.keyword", "size": 5, "order": { "_term": "desc" } }, "aggs": { "5": { "terms": { "field": "YourField.keyword", // 补全截断部分的示例字段 "size": 5, "order": { "_term": "desc" } } } } } } } } } } }
接下来是对应的NEST代码实现(基于Elasticsearch .NET客户端最新版本的写法):
var response = await client.SearchAsync<YourDocumentType>(s => s .Size(0) .Aggregations(a => a .DateHistogram("4", dh => dh .Field(f => f.BeginDate) .Interval(DateInterval.Day) .TimeZone("America/Phoenix") .MinDocCount(1) .Aggregations(subAggs => subAggs .Terms("2", t => t .Field(f => f.Application.Suffix("keyword")) .Size(5) .Order(o => o.TermDescending()) .Aggregations(subSubAggs => subSubAggs .Terms("3", t => t .Field(f => f.Module.Suffix("keyword")) .Size(5) .Order(o => o.TermDescending()) .Aggregations(finalAggs => finalAggs .Terms("5", t => t .Field(f => f.YourField.Suffix("keyword")) // 对应截断部分的字段 .Size(5) .Order(o => o.TermDescending()) ) ) ) ) ) ) ) ) );
关键对应点说明:
Size(0)对应Kibana查询里的"size": 0,只返回聚合结果不返回原始文档DateHistogram直接映射Kibana的date_histogram聚合,参数Interval、TimeZone、MinDocCount一一对应- 嵌套的
Terms聚合对应Kibana里的terms聚合,Field(f => f.Application.Suffix("keyword"))用来指定keyword类型的字段,和Kibana里的Application.keyword一致 Order(o => o.TermDescending())对应Kibana里的"order": { "_term": "desc" },按字段值降序排序
如果原始查询末尾的聚合有特殊需求,只需要调整最后一层Terms聚合的字段和参数即可。
内容的提问来源于stack exchange,提问作者Eric Stewart
相关产品推荐
相关产品推荐

