zoukankan      html  css  js  c++  java
  • springBoot集成es,和api

    1.创建新springboot项目
    //选中默认springboot版本 + NoSql 中的 es
    //注意项目使用java8
    //进入项目后,调整 项目使用 java1.8  + javascript EC6
     
    //在pom 文件中 注意 设置使用的es版本、
    <properties>
        <java.version>1.8</java.version>
        <!--自定义版本依赖-->
        <elasticsearch.version>7.6.1 </elasticsearch.version>
    </properties>
     
    //准备 vue.js 和 axios.js
    cnpm install vue
    cnpm install axios
    
    2.注意 springboot版本中es的版本   , 和本地版本 是否一致
    //创建RestHighLevelClient 客户端对象。  Config文件
    // 1.找spring对象
    // 2.放到spring中
    @Configuration //xml
    public class ElasticSearchClientConfig {
        @Bean
        public RestHighLevelClient restHighLevelClient(){
            RestHighLevelClient client =new RestHighLevelClient(RestClient.builder(new HttpHost("127.0.0.1",9200,"http")));
            return client;
        }
    }
    

      

    3.构建实体对象
    package com.sinsoft.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import org.springframework.stereotype.Component;
     
    /**
    * @Auther Qianxy
    * @Date 2020/7/26
    */
    //AllArgsConstructor  有参
    //NoArgsConstructor   无参
    //Component  注入到 spring 中
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Component
    public class User {
     
        private String name;
        private int age;
        
    }
    
    4.自定义es简单API
    package com.sinsoft;
     
    import com.alibaba.fastjson.JSON;
    import com.sinsoft.pojo.User;
    import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
    import org.elasticsearch.action.bulk.BulkRequest;
    import org.elasticsearch.action.bulk.BulkResponse;
    import org.elasticsearch.action.delete.DeleteRequest;
    import org.elasticsearch.action.delete.DeleteResponse;
    import org.elasticsearch.action.get.GetRequest;
    import org.elasticsearch.action.get.GetResponse;
    import org.elasticsearch.action.index.IndexRequest;
    import org.elasticsearch.action.index.IndexResponse;
    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.action.support.master.AcknowledgedResponse;
    import org.elasticsearch.action.update.UpdateRequest;
    import org.elasticsearch.action.update.UpdateResponse;
    import org.elasticsearch.client.RequestOptions;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.client.indices.CreateIndexRequest;
    import org.elasticsearch.client.indices.CreateIndexResponse;
    import org.elasticsearch.client.indices.GetIndexRequest;
    import org.elasticsearch.common.unit.TimeValue;
    import org.elasticsearch.common.xcontent.XContentType;
    import org.elasticsearch.index.query.MatchAllQueryBuilder;
    import org.elasticsearch.index.query.QueryBuilder;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.index.query.TermQueryBuilder;
    import org.elasticsearch.search.SearchHit;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.test.context.SpringBootTest;
    import javax.naming.directory.SearchResult;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.concurrent.TimeUnit;
     
    @SpringBootTest
    class TonyEsApiApplicationTests {
     
        //Qualifier 指定
        @Autowired
        @Qualifier("restHighLevelClient")
        private RestHighLevelClient client;
        @Test
        void contextLoads() throws IOException {
            //1.创建索引请求
            CreateIndexRequest request = new CreateIndexRequest("kuang_index1");
            //2.执行请求  indicesClient,请求后获得响应
            CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
            //获取索引的类型
            System.out.println(createIndexResponse.index());
            //
            System.out.println(createIndexResponse);
        }
     
        //获取 索引
        @Test
        void testExistIndex () throws IOException{
            //获取 索引请求、
            GetIndexRequest request = new GetIndexRequest("kuang_index");
            boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
            System.out.println(exists);
        }
     
        //删除索引
        @Test
        void testDeleIndex () throws IOException{
            //删除
            DeleteIndexRequest request = new DeleteIndexRequest("kuang_index1");
            AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
            System.out.println(delete.isAcknowledged());
        }
     
     
        //添加文档
        @Test
        void testAddDocument()throws IOException{
            //创建对象
            User user = new User("狂神说", 3);
            //创建请求
            IndexRequest request = new IndexRequest("kuang_index");
            //规则 put /kaung_index/_doc/1
            request.id("1");
            request.timeout(TimeValue.timeValueSeconds(1));
            request.timeout("1s");
            //将请求数据放在 json
            request.source(JSON.toJSONString(user), XContentType.JSON);
            //客户端发送请求 , 获取响应的结果
            IndexResponse index = client.index(request, RequestOptions.DEFAULT);
     
            System.out.println(index.toString());
            System.out.println(index.status());
        }
     
     
        //获取文档
        @Test
        void testIsExist() throws IOException{
            GetRequest getRequest = new GetRequest("kuang_index", "1");
            //getRequest
            //getRequest.fetchSourceContext(new FetchSourceContext(false));
            //getRequest.storedFields("_none_");
            boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
            System.out.println(exists);
     
        }
     
     
        //获得文档信息
        @Test
        void testGetDocument() throws IOException{
     
            GetRequest getRequest = new GetRequest("kuang_index","1");
            GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
            System.out.println(getResponse.toString());
            System.out.println(getResponse);
        }
     
     
        //更新文档
        @Test
        void testUpDateRequest() throws IOException{
            UpdateRequest updateRequest = new UpdateRequest("kuang_index", "1");
            updateRequest.timeout("1s");
     
            User user = new User("qianaa1",21);
            // kuang_index/_doc/1/_update
            updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
            UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);
            System.out.println(updateResponse.status());
     
        }
     
        //删除文档记录
        @Test
        void testDeleteRequest() throws IOException{
            DeleteRequest request = new DeleteRequest("kuang_index", "1");
            request.timeout("1s");
            DeleteResponse delete = client.delete(request, RequestOptions.DEFAULT);
            System.out.println(delete.status());
     
        }
     
        //批量插入数据
        @Test
        void testBulkRequest() throws IOException{
            BulkRequest bulkRequest = new BulkRequest();
            bulkRequest.timeout("10s");
            ArrayList<User> userArrayList = new ArrayList<>();
     
            userArrayList.add(new User("qianaa1",12));
            userArrayList.add(new User("qianaa1",12));
            userArrayList.add(new User("qianaa1",12));
            userArrayList.add(new User("qianaa1",12));
            userArrayList.add(new User("qianaa1",12));
            userArrayList.add(new User("qianaa1",12));
     
            //批处理请求
            for (int i = 0; i <userArrayList.size() ; i++) {
                bulkRequest.add(
                            new IndexRequest("kuang_index")
                            .id(""+(i+1))
                            .source(userArrayList.get(i),XContentType.JSON)
                );
            }
            BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
            //是否失败  false 就是没有失败
            System.out.println(bulkResponse.hasFailures());
        }
     
     
        //查询
        //  1.SearchRequest 构建请求
        //  2.SearchSourceBuilder  条件构造
        //  3.TermQueryBuilder 精确条件构造  MatchAllQueryBuilder 全部查询
        //  4.SearchResponse client.search() 执行客户端请求
        //  5.searchResponse.getHits().getHits() 解析封装的Json数据,需要getHits两次
        @Test
        void testSeach() throws IOException{
            SearchRequest searchRequest = new SearchRequest("kuang_index");
     
     
            //构建搜索
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            //高亮 API
            //searchSourceBuilder.highlighter();
     
     
            //精确搜索
            TermQueryBuilder termQueryBuilder = new TermQueryBuilder("name","qianaa1");
            //全部查询,匹配索引
            //MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
     
     
            //执行精确查询
            searchSourceBuilder.query(termQueryBuilder);
            //分页  有默认值
            //searchSourceBuilder.from();
            //searchSourceBuilder.size();
     
            //设定 过期时间
            searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
     
     
            //将构建索引 放入请求
            searchRequest.source(searchSourceBuilder);
     
     
            //客户端 进行查询
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            // es将客户端查询数据  分装在Hits
            // searchResponse.getHits()  获取的java对象,json工具不能解析
            //searchResponse.getHits().getHits()  获取可以解析json对象
            System.out.println(JSON.toJSONString(searchResponse.getHits().getHits()));
            System.out.println("===================================================");
            //展示对象
            for (SearchHit documentFields:searchResponse.getHits().getHits() ) {
                System.out.println(documentFields.getSourceAsMap());
            }
     
        }
     
    }
    

      

     
     
  • 相关阅读:
    mysql 聚集函数 count 使用详解
    在Docker中使用kettle遇到的问题解决
    整取零存_字段级迁移工具
    快速修改MySQL字段类型
    数据仓库知识点梳理(4)
    五一节分享60多本免费AI电子书
    数据仓库知识点梳理(3)
    数据仓库知识点梳理(2)
    数据仓库知识点梳理(1)
    解决MacVim在macOS Catalina下字母显示不全的问题
  • 原文地址:https://www.cnblogs.com/money131/p/13417377.html
Copyright © 2011-2022 走看看