ES使用JAVA api在开发中查询数据的详细使用(与mysql sql语句对比)_java 结合es的api查询构建和mysql对比-程序员宅基地

技术标签: 对比mysql  ElasticSearch  联合查询(join)  ES查询  嵌套查询  

一、先附上工具类ESUtil.java

package com.lenovo.liebao.biapp.data.util;


import org.apache.http.HttpHost;
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.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.script.ScriptType;
import org.elasticsearch.script.mustache.SearchTemplateRequest;
import org.elasticsearch.script.mustache.SearchTemplateResponse;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregation;
import org.elasticsearch.search.aggregations.metrics.Sum;
import org.elasticsearch.search.builder.SearchSourceBuilder;

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

/**
 * 类描述:Elasticsearch 工具类
 */
public class ESUtil {
   
    

    public static String index = "wpc";

    static RestHighLevelClient client = null;
    static{
   
    
        init();
    }

    public static void init(){
   
    

        RestClientBuilder lowLevelRestClient = RestClient.builder(
                new HttpHost("172.17.172.94", 9201, "http"),
                new HttpHost("172.17.172.94", 9202, "http"));
        //High Level Client init
        client =
                new RestHighLevelClient(lowLevelRestClient);
    }

    /**
     * 方法描述:查询elasicsearch
     * @param index  索引名(库名)
     * @param sourceBuilder  查询条件
     * @return
     */
    public static Object query(String index, SearchSourceBuilder sourceBuilder){
   
    


        return query(index,sourceBuilder, false);

    }

    /**
     * 方法描述:查询elasicsearch
     * @param index  索引名(库名)
     * @param sourceBuilder  查询条件
     * @param  isCount 是否统计个数
     * @return
     */
    public static Object query(String index, SearchSourceBuilder sourceBuilder, boolean isCount){
   
    

        SearchRequest searchRequest = new SearchRequest(index);

        searchRequest.source(sourceBuilder);
        List<Object> list = new ArrayList<>();
        try {
   
    
            SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);

            if(!isCount){
   
    
                //正常查询
                SearchHit[] hits = response.getHits().getHits();

                for(SearchHit hit : hits){
   
    
                    Map<String, Object> doc = hit.getSourceAsMap();
                    list.add(doc);
                }
            }else{
   
    
                //统计个数
                return Integer.parseInt(""+response.getHits().getTotalHits().value);
            }
        } catch (IOException e) {
   
    
            e.printStackTrace();
        }
        return list;

    }




    /**
     * 方法描述:聚合查询
     * @param index  索引名(库名)
     * @param sourceBuilder  查询条件
     * @return
     */
    public static Object agg(String index, SearchSourceBuilder sourceBuilder){
   
    

        SearchRequest searchRequest = new SearchRequest(index);

        searchRequest.source(sourceBuilder);
        List<Object> list = new ArrayList<>();
        try {
   
    
            SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
            Map<String, Object> map = new HashMap();
            for(Aggregation agg : response.getAggregations().asList()){
   
    
                map.put(agg.getName(), ((NumericMetricsAggregation.SingleValue)agg).value());
            }

            list.add(map);
            return list;
        } catch (IOException e) {
   
    
            e.printStackTrace();
        }
        return list;

    }

    /**
     * 方法描述:分组+聚合elasicsearch
     * @param index  索引名(库名)
     * @param sourceBuilder  查询条件
     * @return
     */
    public static Object groupAndAgg(String index, SearchSourceBuilder sourceBuilder, String[] colNames){
   
    

        SearchRequest searchRequest = new SearchRequest(index);

        searchRequest.source(sourceBuilder);
        List<Object> list = new ArrayList<>();
        try {
   
    
            SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
            Terms groupAggs = response.getAggregations().get("group_by");

            for(Terms.Bucket bucket: groupAggs
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_31110299/article/details/103404067

智能推荐

NISP一级课程学习-第二章信息安全基础技术_nisp一级导图-程序员宅基地

文章浏览阅读1.1k次。信息安全基础技术密码学威胁、安全属性与密码学技术密码学发展古典密码(古代——19世纪末)近代密码(20世纪初——1949)20世纪初到1949年现代密码(1949——1976)公钥密码(1976—— )加密与解密明文(Plaintext)密文(Ciphertext)或密报(Cryptogram)加密员或密码员(Cryptographer)截获加密(Encryption )解密(Decryption )对称密码算法非对称密码算法混合加密哈希函数MD5算法SHA-1算法比较SHA-1/MD5数字签名数字签名的应_nisp一级导图

java web中的request和response_webstem中res-程序员宅基地

文章浏览阅读728次。request对象和request对象 request对象是来获取请求消息,response对象是来设置响应消息requset对象继承体系结构:ServletRequest -- 接口    | 继承HttpServletRequest -- 接口protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//下文中的req._webstem中res

python爬取JB51电子书信息-程序员宅基地

文章浏览阅读178次。为什么80%的码农都做不了架构师?>>> ..._jb51 python

gui linux 桌面应用,吃掉Linux开发者,WSL支持GUI应用-程序员宅基地

文章浏览阅读291次。在 WSL 中运行 Linux GUI 应用已成为现实,微软 WSL 团队产品经理 Craig Loewen 在推特展示了其团队为 WSL 添加对 Linux GUI 应用的支持,并表示越来越接近初始预览阶段,将会在未来几个月内发布的 Windows Insiders 预览版本中引入。当前的 WSL 支持运行命令行 Linux 应用,通过 Linux GUI App Integration(WSL...

解决 Layui + Vue 动态渲染数据在 IE下 form.render() 无效 问题_layui.form.render()不生效-程序员宅基地

文章浏览阅读1.6k次。前阵时间写了一遍关于 "layui+vue实现select动态加载后台数据" 的文章,用setTimeout +layui.form.render() 的方式来局部刷新的方式重新渲染页面,代码如下var new Vue({ el:"#app", data:{ items:null }, mounted:function () { this...._layui.form.render()不生效

Linux分区&格式化&文件系统&LVM&扩容-程序员宅基地

文章浏览阅读774次。2019独角兽企业重金招聘Python工程师标准>>> ...

随便推点

在 Tableau 中使用“集”提升分析效果的 5 种方法_tableau底部集-程序员宅基地

文章浏览阅读8.3k次。集可以被视为自定义段,但与维度字段不同,它们始终是二进制的。换句话说,您要么在 “集” 中,要么不在 “集” 中。除了这个限制之外,几乎任何东西都可以创建 “集” 。您可以通过选择放置在 “集” 中的各个维度成员创建,或基于条件创建 “集” ,还可以使用顶部或底部创建 “集” ,等等。 如何在 Tableau 中创建集? 与创建筛选器的方法类似,我们可以在 Tableau 中通过几..._tableau底部集

tinymediamanager 刮削器安卓_mgstage-程序员宅基地

文章浏览阅读1.3k次。docker run -d --name=tinymediamanager \-v /share/data/docker/tinymediamanager/config:/config \-v /share/data/docker/tinymediamanager/media:/media \-e GROUP_ID=0 -e USER_ID=0 -e TZ=Europe/Madrid \-p 5800:5800 \-p 5900:5900 \romancin/tinymediamanager:l_mgstage

Ubuntu apt-get换源_ubuntu apt换源-程序员宅基地

文章浏览阅读2.6w次,点赞20次,收藏78次。Ubuntu apt-get换源一、更换镜像源1. 备份源配置文件>> cd /etc/apt/>> cp sources.list sources.list.old2. 打开阿里云镜像站:OPSX阿里镜像站,找到Ubuntu,点击右边的帮助,查看对应版本的镜像源信息阿里镜像站相关配置相关配置3.用g..._ubuntu apt换源

LeetCode 117 Populating Next Right Pointers in Each Node II_leetcode117-程序员宅基地

文章浏览阅读890次。Follow up for problem "Populating Next Right Pointers in Each Node".What if the given tree could be any binary tree? Would your previous solution still work?Note:You may only use constant extr_leetcode117

平安城市、天网工程和雪亮工程有何不同_平安城市,天网工程和雪亮工程的区别-程序员宅基地

文章浏览阅读4.4k次。平安城市 平安城市是一个超巨型、强综合性的城市管理系统,通过三防系统(技防系统、物防系统、人防系统)和管理系统共同建设城市的平安和谐。不仅需要满足治安管理、社会防控、道路管理、人员管理、应急处理等需求,而且还要兼顾灾难预警、安全生产监控等方面对图像监控的需求,同时还要考虑各系统之间的联动平安城市的建设,平安城市最早在北京宣武区、山东济南、浙江杭州和江苏苏州四个城市开始做试点。2004年......_平安城市,天网工程和雪亮工程的区别

postek二次开发_博思得RFID标签打印机解析-程序员宅基地

文章浏览阅读1.3k次。【IT168厂商动态】近年来,物联网作为我国战略发展新兴行业,物联网概念持续升温,作为推进物联网发展的关键技术之一RFID无线射频技术,也随之形成高速发展和广泛应用的局面。POSTEK博思得作为国内领先条码/RFID打印机品牌,其公司拥有众多打印机方面的国家专利技术,近期研发上市的RFID标签打印机TXr系列RFID工业标签打印机,将适应我国物联网发展的需求,广泛应用在智能物流、智能交通、智能农业..._postek rfid 二次开发

推荐文章

热门文章

相关标签