zoukankan      html  css  js  c++  java
  • es7.+(五)-- springBoot使用ES-Rest-Client整合high-level-client

    为什么使用ES-Rest-Client

    其他工具

    通过9300:tcp

    • 由于springboot版本不同,transport-api.jar不同,不能适配较高的es版本
    • 7.x不建议使用,8.0要废弃

    通过9200:http发送请求

    JestClient:非官方,更新慢
    RestTemplate:spring自带的,模拟发送Http请求,ES很多操作(DSL语句)需要自己封装,麻烦
    HttpClient:同上

    Elasticsearch-Rest-Client:官方提供,封装了ES操作,API层次分明,上手简单
    (https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-hight.html)

    构建

    导入maven地址

    <!--导入Elasticsearch-Rest-Client的maven地址-->
            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-high-level-client</artifactId>
                <version>7.6.2</version>
            </dependency>
    
    • 查看springboot2.4.3的es依赖配置

      发现是7.9.3版本而我们用的是7.6.2版本

    • 在pom.xml中配置版本号为7.6.2

    可以看到maven依赖全部变为7.6.2了

    使用---详细见官方文档

    Java Rest Client官方文档,(https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.x/java-rest-high.html)

    存储信息到es

    public void indexData() throws IOException {
            //创建构造器指定idnex索引
            IndexRequest indexRequest = new IndexRequest("users");
            indexRequest.id("1");//id
            //以k-v形式存储
           // indexRequest.source("userName","zhangsan","age",18,"gender","男");
    
            //以实体类存储
            User user = new User();
            user.setAge(18);
            user.setUserName("zhansan");
            user.setGender("男");
            ObjectMapper objectMapper = new ObjectMapper();
            String json = objectMapper.writeValueAsString(user);
            indexRequest.source(json, XContentType.JSON);//要保存的内容,一定要传内容类型
    
            //执行操作
            IndexResponse index = client.index(indexRequest, ElasticSearchConfig.COMMON_OPTIONS);
    
            //提取有用的响应数据
            System.out.println(index);
        }
    
    

    查询和聚合分析数据

    各种查询在QueryBuilders工具类中都有
    AggregationBuilders是聚合分析的工具类

     public void searchData() throws IOException{
            //创建检索请求
            SearchRequest searchRequest = new SearchRequest();
            searchRequest.indices("bank");//指定检索的索引
            //指定DSL,检索条件
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
            //构造检索条件
            sourceBuilder.query(QueryBuilders.matchQuery("address","mill"));
    
            //使用聚合
            //1).按照年龄大小分布进行聚合
            TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10);
            sourceBuilder.aggregation(ageAgg);
    
            //2).计算平均薪资
            AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("balance");
            sourceBuilder.aggregation(balanceAvg);
    
            //System.out.println("检索条件"+sourceBuilder.toString());
            System.out.println(sourceBuilder.toString());
    //        searchSourceBuilder.from();
    //        searchSourceBuilder.size();
    //        searchSourceBuilder.aggregation();
    
            searchRequest.source(sourceBuilder);
    
            //执行检索
            SearchResponse searchResponse = client.search(searchRequest, ElasticSearchConfig.COMMON_OPTIONS);
            //System.out.println(searchResponse.toString());
    
            //3.分析结果 searchResponse
            ObjectMapper objectMapper = new ObjectMapper();
            //转化为map可以提取出想要的值
         //   Map map = objectMapper.readValue(searchResponse.toString(), Map.class);
    
            //官方还提供了简便方法可以直接获取查询,聚合的结果
            SearchHits hits = searchResponse.getHits();
            SearchHit[] searchHits = hits.getHits();//获取所有命中的记录
            for (SearchHit hit:searchHits){
                String json = hit.getSourceAsString();
                Account account = objectMapper.readValue(json,Account.class);
            }
    
            //获取检索到的聚合分析信息
            Aggregations aggregations = searchResponse.getAggregations();
            aggregations.asList();//将所有聚合信息转化为list
            for(Aggregation aggregation1:aggregations.asList()){
                aggregation1.getName();//打印出当前聚合名字,例如ageAgg、balanceAvg
            }
    
            Terms ageAgg1 = aggregations.get("ageAgg");
            for (Terms.Bucket bucket:ageAgg1.getBuckets()){
                String keyAsString = bucket.getKeyAsString();
                System.out.println("年龄"+keyAsString);
            }
    
            Avg balanceAvg1 = aggregations.get("balanceAvg");
            System.out.println("获取平均薪资"+balanceAvg1.getValue());
        }
    

    实现高亮检索

    (https://blog.csdn.net/qq_37362891/article/details/103295317)

    实现复合查询

    (https://blog.csdn.net/u014646662/article/details/97130086)

    实现多重查询

     /**
         * 实现多重查询
         */
        @Test
        public void test9() throws IOException {
            MultiSearchRequest request = new MultiSearchRequest();
            SearchRequest firstSearchRequest = new SearchRequest();
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(QueryBuilders.matchQuery("goodsTitle","英雄联盟"));
            searchSourceBuilder.from(0);
            searchSourceBuilder.size(10);
            firstSearchRequest.source(searchSourceBuilder);
            request.add(firstSearchRequest);
            System.out.println("检索一:"+searchSourceBuilder.toString());
    
    
            SearchRequest secondSearchRequest = new SearchRequest();
            searchSourceBuilder = new SearchSourceBuilder();
    
            searchSourceBuilder.query(QueryBuilders.matchQuery("goodsDes","英雄联盟"));
            searchSourceBuilder.from(0);
            searchSourceBuilder.size(10);
            secondSearchRequest.source(searchSourceBuilder);
            System.out.println("检索二:"+searchSourceBuilder.toString());
            request.add(secondSearchRequest);
    
    
            System.out.println(request.toString());
            MultiSearchResponse getResponse = client.msearch(request,ElasticSearchConfig.COMMON_OPTIONS);
            System.out.println(getResponse);
        }
    
  • 相关阅读:
    NetSuite Batch Process Status
    NetSuite generated bank files and the Bank Reconciliation process
    Global Search file content in Gitlab repositories, search across repositories, search across all files
    FedEx Package Rate Integration with NetSuite direct integrate by WebServices
    git Merge branches
    git tag and NetSuite deployment tracking
    API 读写cookie的方法
    C# 生成缩略图
    解决jquery操作checkbox全选全不选无法勾选问题
    JS读取写入删除Cookie方法
  • 原文地址:https://www.cnblogs.com/psyduck/p/14476823.html
Copyright © 2011-2022 走看看