基于ES之业务数据分组求和TopN开发

简介: 需求:把作家所有作品的总点击数加起来求和再进行排序的一个实现

需求:把作家所有作品的总点击数加起来求和再进行排序的一个实现

1.先通过SQL语句计算出作家排行

select sum(a.clickcount) countTotal,a.author,group_concat(a.name) novel_names
from db_novel.novel_test a group by author order by countTotal desc ;


7.png

2.把SQL语句转换成ES语句

语句转换地址:http://www.ischoolbar.com/EsParser/

8.png

3.格式化 ES语句

格式化语句地址:http://www.bejson.com/

9.png

4.创建索引【novel_author_countsort 】

拷贝之前创建的novel索引,直接修改author字段的类型为【 keyword 】

{
  "novel_author_countsort" : {
    "mappings" : {
      "doc" : {
        "properties" : {
          "@timestamp" : {
            "type" : "date"
          },
          "@version" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "author" : {
            "type" : "keyword"
          },
          "category" : {
            "type" : "keyword"
          },
          "clickcount" : {
            "type" : "long"
          },
          "collect" : {
            "type" : "long"
          },
          "count" : {
            "type" : "long"
          },
          "countrecommend" : {
            "type" : "long"
          },
          "detail" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "id" : {
            "type" : "long"
          },
          "lastchapter" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "lastupdate" : {
            "type" : "date",
            "format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
          },
          "monthclick" : {
            "type" : "long"
          },
          "monthrecommend" : {
            "type" : "long"
          },
          "name" : {
            "type" : "keyword"
          },
          "new" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "novelinfo" : {
            "type" : "keyword"
          },
          "picurl" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "status" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "weekclick" : {
            "type" : "long"
          },
          "weekrecommend" : {
            "type" : "long"
          }
        }
      }
    }
  }
}

5.给索引【novel_author_countsort】加载数据

# 加载数据
POST _reindex
{
  "source": {
    "index": "novel"
  },
  "dest": {
    "index": "novel_author_countsort"
  }
}

6.测试

基于之前SQL语句生成的ES进行测试

# 测试
GET novel_author_countsort/_search
{
  "size" : 0,
  "aggs": {
    "author": {
      "terms": {
        "field": "author",
        "size": 10,
        "order": {
          "countTotal": "DESC"
        }
      },
      "aggs": {
        "countTotal": {
          "sum": {
            "field": "clickcount"
          }
        },
        "top": {
          "top_hits": {
            "size": 1
          }
        }
      }
    }
  }
}

10.png

相关文章
|
8月前
|
Serverless Python
分组和聚合DataFrame信息案例解析
该文介绍了如何使用pandas对DataFrame进行分组和聚合操作。首先,通过创建字典并转换为DataFrame,展示了基础数据结构。接着,利用`groupby()`方法按城市字段进行数据分组,然后应用`mean()`函数计算各城市平均年龄,显示了聚合功能。此外,文中指出还可使用`sum()`、`count()`等其他聚合函数处理分组数据。
83 0
|
6月前
去重Cube的优化实践问题之直接计算去重类指标的方法具体问题如何解决
去重Cube的优化实践问题之直接计算去重类指标的方法具体问题如何解决
|
7月前
|
SQL 安全 数据挖掘
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
Elasticsearch聚合查询用于复杂数据分析,包括统计空值率。示例展示了如何计算字段`my_field`非空非零文档的百分比。查询分为三步:总文档数计数、符合条件文档数计数及计算百分比。聚合概念涵盖度量、桶和管道聚合。脚本在聚合中用于动态计算。常见聚合类型如`sum`、`avg`、`date_histogram`等。组合使用可实现多值统计、嵌套聚合和空值率计算。[阅读更多](https://zhangfeidezhu.com/?p=515)
321 0
Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的?
|
7月前
|
存储 缓存 自然语言处理
elasticsearch 聚合 : 指标聚合、桶聚合、管道聚合解析使用总结
elasticsearch 聚合 : 指标聚合、桶聚合、管道聚合解析使用总结
|
8月前
|
SQL 搜索推荐 数据库
8. 聚合查询
8. 聚合查询
|
存储
ES聚合查询详解(四):管道聚合
ES聚合查询详解(四):管道聚合
568 0
ES聚合查询详解(四):管道聚合
|
SQL 分布式计算 Java
聚合操作_groupBy_聚合操作 | 学习笔记
快速学习聚合操作_groupBy_聚合操作
136 0
聚合操作_groupBy_聚合操作 | 学习笔记
|
分布式计算 大数据 Spark
聚合操作_多维聚合_rollup 案例 | 学习笔记
快速学习聚合操作_多维聚合_rollup 案例
聚合操作_多维聚合_rollup 案例 | 学习笔记
|
大数据 开发者
聚合操作_多维聚合_rollup | 学习笔记
快速学习聚合操作_多维聚合_rollup
聚合操作_多维聚合_rollup | 学习笔记
|
存储 SQL
ES聚合查询详解(三):指标聚合
ES聚合查询详解(三):指标聚合
337 0
ES聚合查询详解(三):指标聚合