如何解决ELASTICSEARCH-计算具有条件的唯一值
我想要一个查询,它根据另一个字段的唯一值返回一个字段重复的次数 我有这个json:
"name" : james,"city" : "chicago" <----------- same
},{
"name" : james,"city" : "san francisco"
},"city" : "chicago" <-----------same
},{
"name" : Mike,"city" : "chicago"
},"city" : "texas"<-----------same
},{
"name" : Peter,
我想根据两个字段的唯一值进行查询。 例如,詹姆斯等于2,因为存在两个相等的字段(名称:詹姆斯,城市,芝加哥)和一个不同的字段(名称:詹姆斯,城市:旧金山) 输出如下:
{
"key" : "james","doc_count" : 2
},{
"key" : "Mike",{
"key" : "Peter","doc_count" : 1
},
是否可以对两个字段进行单个值计数?
解决方法
您可以进行两级术语汇总:
{
"size": 0,"aggs": {
"names": {
"terms": {
"field": "name.keyword","size": 10
},"aggs": {
"citys_by_name": {
"terms": {
"field": "city.keyword","size": 10,"min_doc_count": 2
}
}
}
}
}
}
响应将如下所示:
"aggregations" : {
"names" : {
"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [
{
"key" : "james","doc_count" : 15,"citys_by_name" : {
"doc_count_error_upper_bound" : 0,"buckets" : [
{
"key" : "chicago","doc_count" : 14
}
]
}
},{
"key" : "Peter","doc_count" : 2,"doc_count" : 2
}
]
}
},{
"key" : "mike","buckets" : [ ]
}
}
]
}
}
或者您可以串联字段:
GET test/_search
{
"size": 0,"aggs": {
"names": {
"terms": {
"script": {
"source": "return doc['name.keyword'].value + ' ' + doc['city.keyword'].value","lang": "painless"
},"field": "name.keyword","min_doc_count": 2
}
}
}
}
响应看起来像是这样:
"aggregations" : {
"names" : {
"doc_count_error_upper_bound" : 0,"buckets" : [
{
"key" : "james chicago","doc_count" : 14
},{
"key" : "Peter chicago","doc_count" : 2
}
]
}
}
如果您要在存储分区上获取更多统计信息,请使用stats_buckets聚合:
{
"size": 0,"min_doc_count": 2
}
},"names_stats":{
"stats_bucket": {
"buckets_path":"names._count"
}
}
}
}
结果:
"aggregations" : {
"names" : {
"doc_count_error_upper_bound" : 0,"buckets" : [
{
"key" : "james PARIS","doc_count" : 15
},{
"key" : "james chicago","doc_count" : 13
},{
"key" : "samuel PARIS","doc_count" : 11
},{
"key" : "fred PARIS","doc_count" : 2
}
]
},"names_stats" : {
"count" : 4,"min" : 2.0,"max" : 15.0,"avg" : 10.25,"sum" : 41.0
}
}
,
这是为我解决问题的解决方案
GET test/_search?filter_path=aggregations.count
{
"size": 0,"count":{
"cardinality": {"script": "return doc['name.keyword'].value + ' ' + doc['city.keyword'].value"
}
}
}
}
输出:
{
"aggregations" : {
"count" : {
"value" : 2
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。