• springboot整合elasticsearch


    一、配置类

    在这里插入图片描述

        @Bean
        public RestHighLevelClient esRestClient() {
    
            RestClientBuilder builder = null;
            // 可以指定多个es
            builder = RestClient.builder(new HttpHost(host, 9200, "http"));
    
            RestHighLevelClient client = new RestHighLevelClient(builder);
            return client;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在测试类测试
    在这里插入图片描述

    二、增加

    在这里插入图片描述

       @Test
        public void indexData() throws IOException {
    
            // 设置索引
            IndexRequest indexRequest = new IndexRequest("users");
            indexRequest.id("1");
    
            User user = new User();
            user.setUserName("张三");
            user.setAge(20);
            user.setGender("男");
            String jsonString = JSON.toJSONString(user);
    
            //设置要保存的内容,指定数据和类型
            indexRequest.source(jsonString, XContentType.JSON);
    
            //执行创建索引和保存数据
            IndexResponse index = client.index(indexRequest, GuliESConfig.COMMON_OPTIONS);
    
            System.out.println(index);
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    三、获取数据

    @Test
        public void find() throws IOException {
            // 1 创建检索请求
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("bank");
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
            // 构造检索条件
    //        sourceBuilder.query();
    //        sourceBuilder.from();
    //        sourceBuilder.size();
    //        sourceBuilder.aggregation();
            sourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
            System.out.println(sourceBuilder.toString());
    
            searchRequest.source(sourceBuilder);
    
            // 2 执行检索
            SearchResponse response = client.search(searchRequest, GuliESConfig.COMMON_OPTIONS);
            // 3 分析响应结果
            System.out.println(response.toString());
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    {
        "took":198,
        "timed_out":false,
        "_shards": {"total":1,"successful":1,"skipped":0,"failed":0},
        "hits":{
            "total":{"value":4,"relation":"eq"},
            "max_score":5.4032025,
            "hits":[
                {"_index":"bank",
                 "_type":"account",
                 "_id":"970",
                 "_score":5.4032025,
                 "_source":{"account_number":970,"balance":19648,
                            "firstname":"Forbes","lastname":"Wallace","age":28,
                            "gender":"M","address":"990 Mill Road","employer":"Pheast",
                            "email":"forbeswallace@pheast.com","city":"Lopezo","state":"AK"}
                },
                {"_index":"bank","_type":"account","_id":"136",
                 "_score":5.4032025,
                 "_source":{"account_number":136,"balance":45801,"firstname":"Winnie",
                            "lastname":"Holland","age":38,"gender":"M","address":"198 Mill Lane",
                            "employer":"Neteria","email":"winnieholland@neteria.com","city":"Urie","state":"IL"
                           }
                },
                {"_index":"bank","_type":"account","_id":"345",
                 "_score":5.4032025,
                 "_source":{"account_number":345,"balance":9812,"firstname":"Parker",
                            "lastname":"Hines","age":38,"gender":"M",
                            "address":"715 Mill Avenue","employer":"Baluba","email":"parkerhines@baluba.com",
                            "city":"Blackgum","state":"KY"
                           }
                },
                {"_index":"bank",
                 "_type":"account","_id":"472",
                 "_score":5.4032025,
                 "_source":{"account_number":472,"balance":25571,"firstname":"Lee","lastname":"Long",
                            "age":32,"gender":"F","address":"288 Mill Street","employer":"Comverges",
                            "email":"leelong@comverges.com","city":"Movico","state":"MT"
                           }
                }
            ]
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
     @Test
        public void find() throws IOException {
            // 1 创建检索请求
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("bank");
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
            // 构造检索条件
    //        sourceBuilder.query();
    //        sourceBuilder.from();
    //        sourceBuilder.size();
    //        sourceBuilder.aggregation();
            sourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
            //AggregationBuilders工具类构建AggregationBuilder
            // 构建第一个聚合条件:按照年龄的值分布
            TermsAggregationBuilder agg1 = AggregationBuilders.terms("agg1").field("age").size(10);// 聚合名称
    // 参数为AggregationBuilder
            sourceBuilder.aggregation(agg1);
            // 构建第二个聚合条件:平均薪资
            AvgAggregationBuilder agg2 = AggregationBuilders.avg("agg2").field("balance");
            sourceBuilder.aggregation(agg2);
    
            System.out.println("检索条件"+sourceBuilder.toString());
    
            searchRequest.source(sourceBuilder);
    
            // 2 执行检索
            SearchResponse response = client.search(searchRequest, GuliESConfig.COMMON_OPTIONS);
            // 3 分析响应结果
            System.out.println(response.toString());
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    转换bean

    // 3.1 获取java bean
    SearchHits hits = response.getHits();
    SearchHit[] hits1 = hits.getHits();
    for (SearchHit hit : hits1) {
        hit.getId();
        hit.getIndex();
        String sourceAsString = hit.getSourceAsString();
        Account account = JSON.parseObject(sourceAsString, Account.class);
        System.out.println(account);
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    Account(accountNumber=970, balance=19648, firstname=Forbes, lastname=Wallace, age=28, gender=M, address=990 Mill Road, employer=Pheast, email=forbeswallace@pheast.com, city=Lopezo, state=AK)
    Account(accountNumber=136, balance=45801, firstname=Winnie, lastname=Holland, age=38, gender=M, address=198 Mill Lane, employer=Neteria, email=winnieholland@neteria.com, city=Urie, state=IL)
    Account(accountNumber=345, balance=9812, firstname=Parker, lastname=Hines, age=38, gender=M, address=715 Mill Avenue, employer=Baluba, email=parkerhines@baluba.com, city=Blackgum, state=KY)
    Account(accountNumber=472, balance=25571, firstname=Lee, lastname=Long, age=32, gender=F, address=288 Mill Street, employer=Comverges, email=leelong@comverges.com, city=Movico, state=MT)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Buckets分析信息

    // 3.2 获取检索到的分析信息
    Aggregations aggregations = response.getAggregations();
    Terms agg21 = aggregations.get("agg2");
    for (Terms.Bucket bucket : agg21.getBuckets()) {
        String keyAsString = bucket.getKeyAsString();
        System.out.println(keyAsString);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    搜索address中包含mill的所有人的年龄分布以及平均年龄,平均薪资

    GET bank/_search
    {
      "query": {
        "match": {
          "address": "Mill"
        }
      },
      "aggs": {
        "ageAgg": {
          "terms": {
            "field": "age",
            "size": 10
          }
        },
        "ageAvg": {
          "avg": {
            "field": "age"
          }
        },
        "balanceAvg": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    C# 如何读取dxf档案
    [附源码]java毕业设计览宏公司会议管理系统
    Kerberos环境下 命令行连接kafka 和zk
    鸿蒙开发游戏(一)---大鱼吃小鱼(界面部署)
    【LeetCode(数据结构与算法)】:反转链表
    Redis最佳实践(上)
    JUC并发编程第二篇,对Future的改进,CompletableFuture核心使用
    向日葵无法连接服务器(无法登录)
    %md在printf语句和scanf语句中的区别
    说一下JVM创建对象的流程?
  • 原文地址:https://blog.csdn.net/qq_57818853/article/details/132699406