Es elasticsearch 十七 Java api 实现聚合 几个聚合示例 sql 开启许可 新特效 java 实现es7 sql 功能

news2024/11/28 14:09:15

目录

Java api 实现聚合

依赖

简单聚合按照颜色分组获取每个卖出数量

聚合每个颜色卖出数量,及平均价格(每个分桶子聚合)

按照颜色分组 ,获取销售数量,avg min max sum

按照600区间价格范围分组,算出每个区间销售总额

每个季度销售总额

Sql新特性

简单sql

 聚合sql

启动方式

其他展示方式 csv tsv json yaml

翻译实现 translate sql 怎么转成rest 请求

混合使用

Java 实现 es7 sql功能

许可管理开启白金版试用或购买

引入依赖pom

Java 代码


Java api 实现聚合

依赖


import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpHost;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

简单聚合按照颜色分组获取每个卖出数量

//private RestHighLevelClient client  = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://localhost:9200")));

@Test
public void jh1() throws IOException {
    SearchRequest searchRequest = new SearchRequest("tvs");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.size(0);
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("group_color").field("color");
    searchSourceBuilder.aggregation(termsAggregationBuilder);

    searchRequest.source(searchSourceBuilder);

    SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);

    Aggregations aggregations = response.getAggregations();
    Terms group_color = aggregations.get("group_color");
    List<?extends Terms.Bucket> buckets = group_color.getBuckets();
    for (Terms.Bucket bucKey : buckets){
        System.out.println(bucKey.getKeyAsString()+"  == "+ bucKey.getDocCount());
    }
}

获取关注 buckets 获取所有分桶 -=分组

聚合每个颜色卖出数量,及平均价格(每个分桶子聚合)

@Test
public void jh2() throws IOException {
    SearchRequest searchRequest = new SearchRequest("tvs");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.size(0);
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("group_color").field("color");

    //增加子聚合
    AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("avg_price").field("price");
    termsAggregationBuilder.subAggregation(avgAggregationBuilder);

    searchSourceBuilder.aggregation(termsAggregationBuilder);

    searchRequest.source(searchSourceBuilder);

    SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);

    Aggregations aggregations = response.getAggregations();
    Terms group_color = aggregations.get("group_color");
    List<?extends Terms.Bucket> buckets = group_color.getBuckets();
    for (Terms.Bucket bucKey : buckets){

        //获取子聚合
        Aggregations aggregations9= bucKey.getAggregations();
        Avg avg_price = aggregations9.get("avg_price");

        System.out.println(bucKey.getKeyAsString()+"  == "+ bucKey.getDocCount() +"  ;  avg = "+avg_price.getValue());
    }
}

查询增加子聚合  返回 通过子聚合获取值

按照颜色分组 ,获取销售数量,avg min max sum

@Test
public void jh3() throws IOException {
    SearchRequest searchRequest = new SearchRequest("tvs");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.size(0);
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("group_color").field("color");

    //增加子聚合
    AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("avg_price").field("price");
    termsAggregationBuilder.subAggregation(avgAggregationBuilder);

    SumAggregationBuilder sumAggregationBuilder = AggregationBuilders.sum("sum_price").field("price");
    termsAggregationBuilder.subAggregation(sumAggregationBuilder);

    MaxAggregationBuilder maxAggregationBuilder = AggregationBuilders.max("max_price").field("price");
    termsAggregationBuilder.subAggregation(maxAggregationBuilder);

    MinAggregationBuilder minAggregationBuilder = AggregationBuilders.min("min_price").field("price");
    termsAggregationBuilder.subAggregation(minAggregationBuilder);

    searchSourceBuilder.aggregation(termsAggregationBuilder);
    searchRequest.source(searchSourceBuilder);

    SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);

    Aggregations aggregations = response.getAggregations();
    Terms group_color = aggregations.get("group_color");
    List<?extends Terms.Bucket> buckets = group_color.getBuckets();
    for (Terms.Bucket bucKey : buckets){

        //获取子聚合
        Aggregations aggregations9= bucKey.getAggregations();
        Avg avg_price = aggregations9.get("avg_price");
        Sum sum_price = aggregations9.get("sum_price");
        Min min_price = aggregations9.get("min_price");
        Max max_price = aggregations9.get("max_price");

        System.out.println(bucKey.getKeyAsString()+"  == "+ bucKey.getDocCount() +"  ;  avg = "+avg_price.getValue()
                +"  ;  sum_price = "+sum_price.getValue()
                +"  ;  min_price = "+min_price.getValue()
                +"  ;  max_price = "+max_price.getValue());
    }
}

按照600区间价格范围分组,算出每个区间销售总额

@Test
public void jh4() throws IOException {
    SearchRequest searchRequest = new SearchRequest("tvs");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.size(0);
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    HistogramAggregationBuilder termsAggregationBuilder =  AggregationBuilders.histogram("group_histogram").field("price").interval(600);

    //增加子聚合
    SumAggregationBuilder sumAggregationBuilder = AggregationBuilders.sum("sum_price").field("price");
    termsAggregationBuilder.subAggregation(sumAggregationBuilder);

    searchSourceBuilder.aggregation(termsAggregationBuilder);
    searchRequest.source(searchSourceBuilder);

    SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);

    Aggregations aggregations = response.getAggregations();
    Histogram group_color = aggregations.get("group_histogram");
    List<?extends Histogram.Bucket> buckets = group_color.getBuckets();
    for (Histogram.Bucket bucKey : buckets){
        //获取子聚合
        Aggregations aggregations9= bucKey.getAggregations();
        Sum sum_price = aggregations9.get("sum_price");

        System.out.println(bucKey.getKeyAsString()+"  == "+ bucKey.getDocCount()
                +"  ;  sum_price = "+sum_price.getValue());
    }
}

每个季度销售总额

@Test
public void jh5() throws IOException {
    SearchRequest searchRequest = new SearchRequest("tvs");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.size(0);
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());

    DateHistogramAggregationBuilder termsAggregationBuilder =AggregationBuilders.dateHistogram("group_histogram")
            .field("sold_date").format("yyyy-MM-dd").minDocCount(0).calendarInterval(DateHistogramInterval.QUARTER)
            .extendedBounds(new ExtendedBounds("2019-01-01","2023-01-01"));

    //增加子聚合
    SumAggregationBuilder sumAggregationBuilder = AggregationBuilders.sum("sum_price").field("price");
    termsAggregationBuilder.subAggregation(sumAggregationBuilder);

    searchSourceBuilder.aggregation(termsAggregationBuilder);
    searchRequest.source(searchSourceBuilder);

    SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);

    Aggregations aggregations = response.getAggregations();
    ParsedDateHistogram group_color = aggregations.get("group_histogram");

    List<?extends Histogram.Bucket> buckets = group_color.getBuckets();
    for (Histogram.Bucket bucKey : buckets){
        //获取子聚合
        Aggregations aggregations9= bucKey.getAggregations();
        Sum sum_price = aggregations9.get("sum_price");

        System.out.println(bucKey.getKeyAsString()+"  == "+ bucKey.getDocCount()
                +"  ;  sum_price = "+sum_price.getValue());
    }
}

Sql新特性

简单sql

post /_sql?format=txt
{
  "query":" select * from tvs "
}

 聚合sql

post /_sql?format=txt
{
  "query":" select color,avg(price),sum(price) from tvs group by color "
}

启动方式

elasticsearch-sql-cli.bat

 

其他展示方式 csv tsv json yaml

post /_sql?format=csv
{
  "query":" select * from tvs "
}

post /_sql?format=tsv
{
  "query":" select * from tvs "
}

post /_sql?format=json
{
  "query":" select * from tvs "
}

post /_sql?format=yaml
{
  "query":" select * from tvs "
}

翻译实现 translate sql 怎么转成rest 请求


post /_sql/translate
{
  "query":" select * from tvs "
}

混合使用


post /_sql?format=txt
{
  "query":" select * from tvs ",
  "filter":{
    "range": {
      "price": {
        "gte": 1110,
        "lte": 2220
      }
    }
  }
}


     brand     |     color     |     price     |       sold_date        
---------------+---------------+---------------+------------------------
天虹2            |红色2            |2000           |2019-12-06T00:00:00.000Z
天虹             |红色             |1800           |2022-12-06T00:00:00.000Z

Java 实现 es7 sql功能

许可管理开启白金版试用或购买

引入依赖pom


    <dependency>
        <groupId>org.elasticsearch.plugin</groupId>
        <artifactId>x-pack-sql-jdbc</artifactId>
        <version>7.3.0</version>
    </dependency>

</dependencies>
<repositories>
    <repository>
        <id>elastic.co</id>
        <url>https://artifacts.elastic.co/maven</url>
    </repository>
</repositories>

Java 代码

package com.esbase.fintech.ais;

import java.sql.*;

public class TestJdbc {

    public static void main(String[] args) throws SQLException {
        //链接
       Connection connection =  DriverManager.getConnection("jdbc:es://http://localhost:9200");
        //创建 statement
        Statement statement = connection.createStatement();
        //执行sql
        ResultSet resultSet = statement.executeQuery("select * from tvs");
        //获取结果
        while (resultSet.next()){
            System.out.println(resultSet.getString(1));
            System.out.println(resultSet.getString(2));
            System.out.println(resultSet.getString(3));
            System.out.println(resultSet.getString(4));
            System.out.println("==========");
        }

    }
}

ok

持续更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/620156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你学习web安全的路线可以介绍是吗

学习网络安全一定要选好一个方向去下功夫&#xff0c;如果不清楚自己究竟适合什么方向&#xff0c;可以都稍微尝试一下再来做选择&#xff0c;实战能力才是重点&#xff0c;所以你最应该找平台&#xff0c;多多实战&#xff0c;完成实际项目&#xff01; 书籍推荐&#xff1a;…

『赠书活动 | 第九期』清华社赞助 | 《Java系列丛书》

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 『赠书活动 &#xff5c; 第九期』 本期书籍&#xff1a;《Java系列丛书》 公众号赠书&#xff1a;第一期 参与方式&#xff1a;关注公众号&#xff1a;低调而奢华 …

react-router V6 传递参数的三种方式

react-router V6 传递参数的三种方式 路由跳转使用navigate()路由传参1&#xff0c;searchParams传参2&#xff0c;params 传参3&#xff0c;state传参总结 路由跳转使用navigate() 编程式导航 导入一个 useNavigate钩子函数执行 useNavigate 函数得到 跳转函数在事件中执行跳…

服务器PING值不稳定是什么情况?

​  服务器ping值不稳定是指服务器在不同时间段内&#xff0c;对同一IP地址进行ping测试时&#xff0c;返回的延迟时间不同&#xff0c;存在波动的情况。这种情况会对服务器的性能和稳定性产生影响&#xff0c;影响用户的使用体验。下面我们来分析一下服务器ping值不稳定的原…

模拟IC方向面试常考问题及答案汇总,IC人必看

有不少小伙伴说想了解模拟IC方向的面试题目&#xff0c;这不就来了&#xff01;&#xff08;文末可领全部面试题目&#xff09; 1. 基尔霍夫定理的内容是什么&#xff1f; 电流定律&#xff1a;在集总电路中&#xff0c;任何时刻&#xff0c;对任一节点&#xff0c;所有流出节…

怎样让你的客户服务更高效

随着商业环境的变化&#xff0c;越来越多的企业开始意识到客户服务对于企业的重要性。高效的客户服务能够促进客户满意并增加销售额&#xff0c;从而帮助企业获得更大的成功。但是&#xff0c;怎样才能让您的客户服务更高效呢&#xff1f;以下是一些建议。 建立一个完善的客户…

浅水域三维探地雷达数值模拟研究

Gprmax浅水域三维地质雷达数值模拟研究 前言 浅水域地下不良地质体的探测一直是工程勘察的难点&#xff0c;地质雷达具有仪器轻便、操作简洁、分辨率高的优势&#xff0c;在浅水域勘察中具有很大的应用前景。目前&#xff0c;二维地质雷达已经有不少应用&#xff0c;三维地质…

面试专题:设计模式

面试时常见的就是的就是让你手写一个单例模式&#xff08;注意单例模式的几种不同的实现方法&#xff09;或者让你说一下某个常见的设计模式在你的项目中是如何使用的&#xff0c;另外面试官还有可能问你抽象工厂和工厂方法模式的区别、工厂模式的思想这样的问题。 建议把代理模…

C++核心编程——详解运算符重载

文章目录&#x1f4ac; 一.运算符重载基础知识①基本概念②运算符重载的规则③运算符重载形式④运算符重载建议 二.常用运算符重载①左移(<<)和右移(>>)运算符重载1️⃣重载后函数参数是什么&#xff1f;2️⃣重载的函数返回类型是什么&#xff1f;3️⃣重载为哪种…

Web测试有哪些基本要点?软件测试找第三方软件检测机构靠谱吗?

互联网时代的到来&#xff0c;让Web应用成为了人们生活和工作中不可或缺的一部分。随着Web应用的快速发展&#xff0c;Web测试也变得越来越重要。本文将从Web测试的基本要点和第三方软件检测机构的可靠性两方面进行讨论。 一、Web测试的基本要点 1. 安全性测试&#xff1a;评…

JVM(Java Virtual Machine)

JVM &#x1f50e;内存区域划分Program Counter Register(程序计数器)Native Method Stacks(本地方法栈)JVM Stacks(虚拟机栈)区分虚拟机栈与本地方法栈&#x1f36d;栈是线程私有的&#x1f36d; Heap(堆区)Metaspace(元数据区)总结 &#x1f50e;类加载类加载的流程加载验证准…

【Apache-Flink零基础入门】「入门到精通系列」手把手+零基础带你玩转大数据流式处理引擎Flink(有状态的流式处理)

手把手零基础带你玩转大数据流式处理引擎Flink&#xff08;有状态的流式处理&#xff09; 传统批处理批处理的特点批处理执行原理理想方法 流式处理分布式流式处理有状态分布式流式处理有状态分散式流式处理 总结分析 传统批处理 传统批处理数据是指一种数据处理方式&#xff…

什么是文件描述符以及重定向的本质和软硬链接(Linux)

目录 1 什么是文件&#xff1f;什么是文件操作&#xff1f;认识系统接口open 什么是文件描述符认识Linux底层进程如何打开的文件映射关系重定向的本质理解软硬链接扩展问题 1 什么是文件&#xff1f;什么是文件操作&#xff1f; 文件 文件内容 文件属性&#xff08;文件属性…

暴力递归到动态规划(二)

⭐️前言⭐️ 本篇文章是由暴力递归到动态规划篇章的第二篇。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 &#x1f349;博客中涉及源…

扫码出入库系统在哪些行业使用率最高?服务业绑得最紧密

什么是扫码出入库系统 扫码出入库系统是一种流行的库存管理系统&#xff0c;它使用二维码、条形码或RFID等技术来管理仓库内的物品出入库情况。 使用扫码出入库系统&#xff0c;用户可以通过扫描物品的二维码或条形码&#xff0c;快速地将物品信息录入系统中&#xff0c;同时…

采用sysbench压测mysql详解

文章目录 安装sysbench工具基于sysbench构造测试表和测试数据数据库读写性能测试数据库读性能测试数据库删除性能测试数据库更新索引字段性能测数据库更新非索引字段性能测试数据库插入数据性能测试数据库写性能测试执行完成压测之后可以将run改成cleanup&#xff0c;清除数据 …

LegalAI公开数据集的整理、总结及介绍(持续更新ing…)

诸神缄默不语-个人CSDN博文目录 最近更新日期&#xff1a;2023.6.7 最早更新日期&#xff1a;2023.6.7 文章目录 1. 司法判决预测2. 通用语料3. 其他集成项目4. 推理5. NLU6. NLG1 QA2 文本摘要 7. 信息抽取1 命名实体识别2 句子边界检测&#xff08;分句&#xff09; 1. 司法…

青岛科技大学|物联网工程|物联网定位技术(第二讲)|15:00

目录 物联网定位技术&#xff08;第二讲&#xff09; 1. 卫星的轨道高度与覆盖区域有何关系&#xff0c;试画图给予说明覆盖区地心角与覆盖面积的关系 2. 试给出实际的卫星地面覆盖区和用户空间可视区所对应的半地心角的公式并请给予解释 3. 定位导航卫星为什么一般不采用同…

【集群】LVS负载均衡群集

文章目录 前言一、企业群集应用概述1. 群集的含义1.1 群集的特点1.2 扩展服务器的方式 2. 群集的类型2.1 负载均衡群集&#xff08;Load Balance Cluster&#xff09;2.2 高可用群集&#xff08;High Availability Cluster&#xff09;2.3 高性能运算群集&#xff08;High Perf…

软考A计划-电子商务设计师-模拟试题卷七

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…