Elasticsearch的灵魂,查询的用法与解析,基本查询,聚合查询,多条件复合查询等。通过java,elasticsearch-rest-high-level-client api操作es。

本文深入探讨Elasticsearch的查询用法,涵盖基础查询如全量、分页、排序、过滤,以及复杂查询如聚合最大值、分组和多分组。通过java和elasticsearch-rest-high-level-client API进行操作,适合进阶学习。
摘要由CSDN通过智能技术生成

        前面基础部分参考自bilibili:【尚硅谷】ElasticSearch教程

目录

前言絮絮叨

开始

1. 基础查询

1.1 查询全部文档

1.2 分页查询

1.3 排序查询

1.4 过滤字段

1.5 条件查询

1.6 范围查询

2. 复杂查询

2.1 聚合查询最大值(max)

2.2 聚合分组查询(term)

2.3 聚合多分组查询(聚合组合composite)

3. 复杂多条件自由组合查询

结尾絮叨叨


前言絮絮叨

        俗话说的好呀!由纲及目,由浅入深。本文也是按照循序渐进的步调一步一步带各位探索Elasticsearch的查询的用法。前半部分基础简单的内容我就不多详解,大家可以直接看代码加上我在上面写的注释就可以理解了,模板都是一个模板。

        俗话又说得好呀!治标不治本,恐怖难除根。在此之前,还是希望米娜桑可以先去熟悉一下原生的es语法结构,而不是一上来就去直接使用api。我本人也是一步一步通过原生的es语法再结合api才推导出具体使用的方法,本文后面介绍的一些高级聚合的查询现在在国内网上都很难找到用法教程,是需要自己不断摸索的!

        俗话又又说得好呀!玫瑰给别人,芳香自己留。本文的初衷有二:分享 与 巩固。为了大家,也为了自己。

开始

        项目构建与包的导入在用Elastic官方的API,elasticsearch-rest-high-level-client来简单操作Elasticsearch的增删改查等功能中已经介绍过了,不多说辣。

        原始数据,在上面那个文章里已经插入过了:

        首先开始之前需要建一个客户端

    //        创建客户端
    RestHighLevelClient client = new RestHighLevelClient(
    //        EsParam.HOSTNAME, EsParam.PORT, EsParam.SCHEME 换成自己的es的ip,端口,协议(http)
            RestClient.builder(new HttpHost(EsParam.HOSTNAME, EsParam.PORT, EsParam.SCHEME))
    );

1. 基础查询

1.1 查询全部文档

    //    TODO 查询AllDoc
    @Test
    void searchAllDoc() throws IOException {
//        创建请求
        SearchRequest request = new SearchRequest();
        request.indices("book1");
//        填入builder
        request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
//        返回结果
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
//        打印结果
        SearchHits hits = response.getHits();
//        总命中数
        System.out.println("hits.getTotalHits() = " + hits.getTotalHits());
        for (SearchHit hit : hits) {
            System.out.println("hit = " + hit.getSourceAsMap());
        }
//        关闭连接
        client.close();
    }

        结果: 

        其中的hits.getTotalHits()为es查询的命中数

1.2 分页查询

        es提供分页功能,但只是提供。可以用但没必要

    //    TODO 分页查询Doc
    @Test
    void searchPageDoc() throws IOException {
//        创建请求
        SearchRequest request = new SearchRequest();
        request.indices("book1");
//        构造builder
        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery())
//                查看哪页:(页面数 - 1)* 每页数据 放到from里
                .from(1)
                .size(3);
//        发送请求
        request.source(builder);
//        返回结果
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
//        打印结果
        SearchHits hits = response.getHits();
        System.out.println("hits.getTotalHits() = " + hits.getTotalHits());
        for (SearchHit hit : hits) {
            System.out.println("hit.getSourceAsMap() = " + hit.getSourceAsMap());
        }
//        关闭连接
        client.close();
    }

         result:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值