ElasticSearch C#分组统计去重:根据Jcx分组统计Sjid数量
这里提供一种可能的实现方式:
using Nest;
using System;
class Program
{
static void Main(string[] args)
{
var settings = new ConnectionSettings(new Uri('http://localhost:9200'))
.DefaultIndex('my_index')
.DefaultMappingFor<MyDocument>(m => m
.PropertyName(p => p.Jcx, 'jcx')
.PropertyName(p => p.Sjid, 'sjid')
);
var client = new ElasticClient(settings);
var searchResponse = client.Search<MyDocument>(s => s
.Size(0)
.Aggregations(a => a
.Terms('jcx_groups', t => t
.Field(f => f.Jcx)
.Aggregations(a1 => a1
.Cardinality('distinct_sjids', c => c
.Field(f => f.Sjid)
)
)
)
)
);
Console.WriteLine('Jcx Distinct Sjids');
foreach (var bucket in searchResponse.Aggregations.Terms('jcx_groups').Buckets)
{
Console.WriteLine($'{bucket.Key} {bucket.Cardinality('distinct_sjids').Value}');
}
}
}
class MyDocument
{
public string Jcx { get; set; }
public string Sjid { get; set; }
}
这里假设:
- ElasticSearch服务运行在本地的9200端口。
- 要查询的索引名为
my_index。 - 要查询的文档类型为
MyDocument,其中包含Jcx和Sjid两个字符串属性。
在查询中,我们使用了Nest库提供的Fluent API来构建查询。具体来说,我们:
- 通过
ConnectionSettings类配置了连接ElasticSearch的设置,包括默认索引名和文档类型的属性名映射。 - 使用
Search方法进行查询,其中:Size(0)表示只返回聚合结果,不返回文档内容。Aggregations方法指定了一个聚合查询,包括:Terms聚合,按Jcx属性分组。Cardinality聚合,对Sjid属性进行去重计数。
- 最后,我们遍历聚合结果的所有分组桶(buckets),输出每个分组的
Jcx属性值和Sjid属性去重计数。
注意,这里的代码仅供参考,具体实现方式可能因不同的数据模型、查询需求等而有所不同。
原文地址: https://www.cveoy.top/t/topic/nbgj 著作权归作者所有。请勿转载和采集!