首页 > 技术文章 > Elasticsearch类似 GROUP_CONCAT 方式的查询

xibb 2022-01-12 14:49 原文

mysql 的GROUP_CONCAT函数,可以把聚合后的数据连接到一起,在ES中,把聚合函数命中的数据展示出来就行,了解了这个,就好办了

查询示例

GET bidding_pool/_search
{
  "size": 0,
  "query": {
    "match_phrase": {
      "project_name": "公告"  //短语查询,对项目名称 包含 “公告” 的数据做聚合
    }
  },
 "aggs": {
   "name": {
     "terms": {
      "field": "province_code"  // 首先根据 省份编码 
     },
     "aggs": {
       "name": {
         "terms": {
           "field": "content_type" // 然后再用 公告类型  , 两者联合,类似mysql group by a,b
         },
         "aggs": {
           "top_users": {
             "top_hits": {
               "_source": ["id","project_name","province_name","province_code"],  //返回命中数据字段
               "size":100
             }
           }
         }
       }
     }
     
   }
 }
}

返回数据样例

{
  "took" : 7,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 46,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "name" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 7,
      "buckets" : [
        {
          "key" : "20845",
          "doc_count" : 23,
          "name" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "合同公告",
                "doc_count" : 19,
                "top_users" : {
                  "hits" : {
                    "total" : {
                      "value" : 19,
                      "relation" : "eq"
                    },
                    "max_score" : 0.24642897,
                    "hits" : [
                      {
                        "_index" : "bidding_pool",
                        "_type" : "_doc",
                        "_id" : "0000f292-98df-11eb-b872-5254001bea8e",
                        "_score" : 0.24642897,
                        "_source" : {
                          "id" : "0000f292-98df-11eb-b872-5254001bea8e",
                          "project_name" : "医疗设备采购的合同公告",
                          "province_code" : "20845",
                          "province_name" : "广西"
                        }
                      }
                    ]
                  }
                }
              },
              {
                "key" : "招标信息",
                "doc_count" : 4,
                "top_users" : {
                  "hits" : {
                    "total" : {
                      "value" : 4,
                      "relation" : "eq"
                    },
                    "max_score" : 0.1472174,
                    "hits" : [
                      {
                        "_index" : "bidding_pool",
                        "_type" : "_doc",
                        "_id" : "000079a5-8568-11eb-b872-5254001bea8e",
                        "_score" : 0.1472174,
                        "_source" : {
                          "id" : "000079a5-8568-11eb-b872-5254001bea8e",
                          "project_name" : "2020-2022年隆林各族自治县储备土地中土地征收、收购、收回涉及的拆迁安置补偿项目服务(BSZC2021-G3-310033-GXGS)公开招标公告",
                          "province_code" : "20845",
                          "province_name" : "广西壮族自治区"
                        }
                      }
                    ]
                  }
                }
              }
            ]
          }
        },
        {
          "key" : "37571",
          "doc_count" : 4,
          "name" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "招标信息",
                "doc_count" : 4,
                "top_users" : {
                  "hits" : {
                    "total" : {
                      "value" : 4,
                      "relation" : "eq"
                    },
                    "max_score" : 0.18565783,
                    "hits" : [
                      {
                        "_index" : "bidding_pool",
                        "_type" : "_doc",
                        "_id" : "00018852-8568-11eb-b872-5254001bea8e",
                        "_score" : 0.18565783,
                        "_source" : {
                          "id" : "00018852-8568-11eb-b872-5254001bea8e",
                          "project_name" : "南京信息职业技术学院数字商务学院网络改造项目公开招标公告",
                          "province_code" : "37571",
                          "province_name" : "江苏省"
                        }
                      }
                    ]
                  }
                }
              }
            ]
          }
        },
        {
          "key" : "37493",
          "doc_count" : 3,
          "name" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "招标信息",
                "doc_count" : 3,
                "top_users" : {
                  "hits" : {
                    "total" : {
                      "value" : 3,
                      "relation" : "eq"
                    },
                    "max_score" : 0.16854326,
                    "hits" : [
                      {
                        "_index" : "bidding_pool",
                        "_type" : "_doc",
                        "_id" : "00026e64-8568-11eb-b872-5254001bea8e",
                        "_score" : 0.16854326,
                        "_source" : {
                          "id" : "00026e64-8568-11eb-b872-5254001bea8e",
                          "project_name" : "上海市青浦区金泽镇社区卫生服务中心过氧化氢消毒系统采购项目公开招标公告",
                          "province_code" : "37493",
                          "province_name" : "上海"
                        }
                      }
                    ]
                  }
                }
              }
            ]
          }
        },
        {
          "key" : "34881",
          "doc_count" : 2,
          "name" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "招标信息",
                "doc_count" : 2,
                "top_users" : {
                  "hits" : {
                    "total" : {
                      "value" : 2,
                      "relation" : "eq"
                    },
                    "max_score" : 0.19709426,
                    "hits" : [
                      {
                        "_index" : "bidding_pool",
                        "_type" : "_doc",
                        "_id" : "0000ac09-8568-11eb-b872-5254001bea8e",
                        "_score" : 0.19709426,
                        "_source" : {
                          "id" : "0000ac09-8568-11eb-b872-5254001bea8e",
                          "project_name" : "山东省某单位水土保持方案技术服务项目公开招标公告",
                          "province_code" : "34881",
                          "province_name" : "山东省"
                        }
                      }
                    ]
                  }
                }
              }
            ]
          }
        },
        {
          "key" : "35412",
          "doc_count" : 2,
          "name" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "招标信息",
                "doc_count" : 2,
                "top_users" : {
                  "hits" : {
                    "total" : {
                      "value" : 2,
                      "relation" : "eq"
                    },
                    "max_score" : 0.22880663,
                    "hits" : [
                      {
                        "_index" : "bidding_pool",
                        "_type" : "_doc",
                        "_id" : "000099fd-8568-11eb-b872-5254001bea8e",
                        "_score" : 0.22880663,
                        "_source" : {
                          "id" : "000099fd-8568-11eb-b872-5254001bea8e",
                          "project_name" : "李遂镇河道清理项目公开招标公告",
                          "province_code" : "35412",
                          "province_name" : "北京"
                        }
                      }
                    ]
                  }
                }
              }
            ]
          }
        },
        {
          "key" : "14887",
          "doc_count" : 1,
          "name" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "招标信息",
                "doc_count" : 1,
                "top_users" : {
                  "hits" : {
                    "total" : {
                      "value" : 1,
                      "relation" : "eq"
                    },
                    "max_score" : 0.1377129,
                    "hits" : [
                      {
                        "_index" : "bidding_pool",
                        "_type" : "_doc",
                        "_id" : "0001101e-8568-11eb-b872-5254001bea8e",
                        "_score" : 0.1377129,
                        "_source" : {
                          "id" : "0001101e-8568-11eb-b872-5254001bea8e",
                          "project_name" : "紫金县地方公路管理站国道G236线紫金黄花至城西段及黄花至新S242线公路改建工程高、低压电缆迁移服务采购项目招标公告",
                          "province_code" : "14887",
                          "province_name" : "广东省"
                        }
                      }
                    ]
                  }
                }
              }
            ]
          }
        },
        {
          "key" : "14928",
          "doc_count" : 1,
          "name" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "招标信息",
                "doc_count" : 1,
                "top_users" : {
                  "hits" : {
                    "total" : {
                      "value" : 1,
                      "relation" : "eq"
                    },
                    "max_score" : 0.19410507,
                    "hits" : [
                      {
                        "_index" : "bidding_pool",
                        "_type" : "_doc",
                        "_id" : "000024b3-8568-11eb-b872-5254001bea8e",
                        "_score" : 0.19410507,
                        "_source" : {
                          "id" : "000024b3-8568-11eb-b872-5254001bea8e",
                          "project_name" : "湘南学院附属医院大输液药品配送采购项目公开招标公告",
                          "province_code" : "14928",
                          "province_name" : "湖南省"
                        }
                      }
                    ]
                  }
                }
              }
            ]
          }
        },
        {
          "key" : "24543",
          "doc_count" : 1,
          "name" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "招标信息",
                "doc_count" : 1,
                "top_users" : {
                  "hits" : {
                    "total" : {
                      "value" : 1,
                      "relation" : "eq"
                    },
                    "max_score" : 0.1601093,
                    "hits" : [
                      {
                        "_index" : "bidding_pool",
                        "_type" : "_doc",
                        "_id" : "0002a0e9-8568-11eb-b872-5254001bea8e",
                        "_score" : 0.1601093,
                        "_source" : {
                          "id" : "0002a0e9-8568-11eb-b872-5254001bea8e",
                          "project_name" : "吉林市丰满区江南乡人民政府吉林化工学院新址用地土壤污染情况详细调查公开招标公告",
                          "province_code" : "24543",
                          "province_name" : "吉林省"
                        }
                      }
                    ]
                  }
                }
              }
            ]
          }
        },
        {
          "key" : "27800",
          "doc_count" : 1,
          "name" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "招标信息",
                "doc_count" : 1,
                "top_users" : {
                  "hits" : {
                    "total" : {
                      "value" : 1,
                      "relation" : "eq"
                    },
                    "max_score" : 0.17547582,
                    "hits" : [
                      {
                        "_index" : "bidding_pool",
                        "_type" : "_doc",
                        "_id" : "0000f024-8568-11eb-b872-5254001bea8e",
                        "_score" : 0.17547582,
                        "_source" : {
                          "id" : "0000f024-8568-11eb-b872-5254001bea8e",
                          "project_name" : "盘州市人民医院数字化彩色超声波诊断装置等设备采购项目(二次)采购公告",
                          "province_code" : "27800",
                          "province_name" : "贵州省"
                        }
                      }
                    ]
                  }
                }
              }
            ]
          }
        },
        {
          "key" : "28125",
          "doc_count" : 1,
          "name" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 0,
            "buckets" : [
              {
                "key" : "招标信息",
                "doc_count" : 1,
                "top_users" : {
                  "hits" : {
                    "total" : {
                      "value" : 1,
                      "relation" : "eq"
                    },
                    "max_score" : 0.16854326,
                    "hits" : [
                      {
                        "_index" : "bidding_pool",
                        "_type" : "_doc",
                        "_id" : "00013c12-8568-11eb-b872-5254001bea8e",
                        "_score" : 0.16854326,
                        "_source" : {
                          "id" : "00013c12-8568-11eb-b872-5254001bea8e",
                          "project_name" : "武汉大学中南医院武汉大学中南医院骨科手术机器人系统采购项目招标(采购)公告",
                          "province_code" : "28125",
                          "province_name" : "湖北省"
                        }
                      }
                    ]
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

  剩下的,就是在java里面解析这个返回结果就行

 

推荐阅读