SpringBoot集成ES

官方文档:https://www.elastic.co/guide/en/elasticsearch/client/index.html
image

新建SpringBoot项目 引入Jar包

注意项目引入的elasticsearch的版本与自己安装的版本是否一致:我本地安装的版本7.15.1 ,项目引入的jar包版本:7.12.1

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>

        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.2</version>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>23.0</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

新建ES的Config文件

@Configuration
public class ElasticSearchClientConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http"),
                        new HttpHost("localhost", 9201, "http")));
        return client;
    }
}

测试索引API

@Test
    public void createIndices() throws IOException {
        //1.创建索引
        CreateIndexRequest createIndexRequest = new CreateIndexRequest(Indices_01);
        //2.客户端执行请求
        CreateIndexResponse createIndexResponse = restHighLevelClient.indices()
                .create(createIndexRequest, RequestOptions.DEFAULT);
        System.out.println("创建索引结果:" + createIndexResponse);
    }

    @Test
    public void getIndices() throws IOException {
        GetIndexRequest getIndexRequest = new GetIndexRequest(Indices_01);
        boolean exists = restHighLevelClient.indices()
                .exists(getIndexRequest, RequestOptions.DEFAULT);
        System.out.println("判断索引是否存在:" + exists);
        GetIndexResponse getIndexResponse = restHighLevelClient.indices()
                .get(getIndexRequest, RequestOptions.DEFAULT);
        System.out.println("获取索引结果:" + getIndexResponse);
    }

    @Test
    public void delIndices() throws IOException {
        DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(Indices_01);
        AcknowledgedResponse delete = restHighLevelClient.indices()
                .delete(deleteIndexRequest, RequestOptions.DEFAULT);
        System.out.println("删除索引结果:" + delete.isAcknowledged());
    }

测试文档API

@Test
    public void createDoc() throws IOException {
        School school = new School("深圳南山小学", "1,1,0,1");
        IndexRequest indexRequest = new IndexRequest(Indices_01);
        //规则:put /index/_doc/1
        indexRequest.id("1");
        indexRequest.timeout(TimeValue.timeValueSeconds(1));
        indexRequest.timeout("1s");

        indexRequest.source(school, XContentType.JSON);

        IndexResponse index = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println("创建文档:" + index.toString() + " status=" + index.status());

    }

    @Test
    public void getDoc() throws IOException {
        GetRequest getRequest = new GetRequest(Indices_01, "1");
        //不获取返回的 _source 的上下文:
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        getRequest.storedFields("_none_");
        boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println("判断文档是否存在:" + exists);

        GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
        System.out.println("获取文档内容:" + documentFields.getSourceAsString());
    }

    @Test
    public void updateDoc() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest(Indices_01, "1");
        updateRequest.timeout("1s");
        School school = new School("深圳福田小学", "1,1,0,1");
        updateRequest.doc(JSON.toJSONString(school), XContentType.JSON);
        UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println("更新文档结果:status=" + update.status());
    }

    @Test
    public void delDoc() throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest(Indices_01, "1");
        deleteRequest.timeout("1s");

        DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println("删除文档结果:status=" + delete.status());
    }

批量保存数据

@Test
    public void batchAddDoc() throws IOException {
        BulkRequest bulkRequest = new BulkRequest(Indices_01);
        bulkRequest.timeout("10s");
        List<School> list = Lists.newArrayList();
        for (int i = 0; i < 20; i++) {
            School school = new School("深圳随机小学" + i, "1,0,1");
            list.add(school);
        }

        //批处理请求
        for (int i = 0; i < list.size(); i++) {
                bulkRequest.add(new IndexRequest(Indices_01)
                        .id("" + (i +1))
                        .source(JSON.toJSONString(list.get(i)), XContentType.JSON)
                );
        }

        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        //hasFailures(): 是否失败 返回false 代表成功
        System.out.println("批量保存文档结果:status=" + bulk.hasFailures());
    }

搜索数据

@Test
    public void testSearch() throws IOException {
        SearchRequest searchRequest = new SearchRequest(Indices_01);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        //termQuery 精确匹配
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "小学");
        //matchAllQuery 匹配所有
//        MatchAllQueryBuilder matchAllQueryBuilder1 = QueryBuilders.matchAllQuery();
        searchSourceBuilder.query(termQueryBuilder);
        //设置高亮
//        searchSourceBuilder.highlighter();
        //分页:
//        searchSourceBuilder.from();
//        searchSourceBuilder.size();
        searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

        searchRequest.source(searchSourceBuilder);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        System.out.println("搜索结果:" + JSON.toJSONString(search.getHits()));
        //打印命中文档数据
        SearchHits hits = search.getHits();
        Arrays.stream(hits.getHits()).forEach(e -> {
            System.out.println(e.getSourceAsString());
        });
    }
posted @ 2021-10-29 20:06  狻猊的主人  阅读(910)  评论(0编辑  收藏  举报