环境:ElasticSearch6.7 需求: 公司数据原先存于阿里云的AnalyticDB for MySQL(以下简称ADBADB),它是一个OLAP分析性数据库,功能强大,支持全文索引和多值列查询,以前是用代码(在IDE工具用.yml文件写SQL语句)基于ADB开发接口进行实时查询数据,但ADB在搜索方面和分词方面相对ADB而言目前来说性能还是有所不足,因此准备将所有基于ADB的SQL语句接口迁移至ElasticSaerch。
在ADB中的代码开发如下所示:
select reporter, count(distinct export_country ) as export_country_count from ads_united_standard_analysis_im_exporter where... group by reporter having export_country_count > 100 order by export_country_count limit 10;迁移至ElasticSearch后的Restful API如下所示:
GET /ads_united_standard_analysis_im_exporter/_search { "query": { 查询条件 }, "size": 0, "aggs": { "agg": { "terms": { "field": "reporter" }, "aggs": { "export_country_count": { "cardinality": { "field": "export_country" } }, "export_country_count_filter": { "bucket_selector": { "buckets_path": { "exporterCountryCount":"export_country_count" }, "script": "params.exporterCountryCount > 190" } }, "exporter_country_count_sort":{ "bucket_sort": { "sort": { "export_country_count":"asc" }, "size": 10 } } } } } }至于代码我们用的是High Level API,总体来说照着Restful API 就可以实现的,这里就不实现了,如何代码实现有问题的朋友可以留言一起交流。。。
寄言:你知道的越多,你知道的越少。
