elasticsearch整合springboot rest client 增删改查

433 阅读2分钟

添加依赖

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

这里要注意版本,本地安装的es版本要和依赖的版本对应,查看springboot中依赖的版本

image.png

<properties>
    <java.version>1.8</java.version>
    <!--自定义es版本,和自己安装的版本一致-->
    <elasticsearch.version>7.6.1</elasticsearch.version>
</properties>

es客户端配置

package es;


import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * es config
 *
 * @author emage-zhoufan
 */
@Configuration
public class ElasticSearchClientConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("127.0.0.1", 9200, "http")));
        // 如果是集群就配置多个
//                      new HttpHost("127.0.0.1", 9201, "http")));

        return client;
    }
}

写测试类

package com.example.elasticsearchapi;

import com.alibaba.fastjson2.JSON;
import com.google.common.collect.Lists;
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.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.client.indices.GetIndexResponse;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.MatchQueryBuilder;
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.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import pojo.User;

import java.io.IOException;
import java.util.List;

@SpringBootTest
class ElasticsearchApiApplicationTests {

    @Autowired
    private RestHighLevelClient client;

    @Test
    void contextLoads() {
    }

    /**
     * 创建索引
     */
    @Test
    void createIndexTest() throws IOException {
        // 1.创建索引请求
        CreateIndexRequest zhuandafa3 = new CreateIndexRequest("zhuandafa3");
        // 2.客户端执行请求
        CreateIndexResponse createIndexResponse =
                client.indices().create(zhuandafa3, RequestOptions.DEFAULT);

        System.out.println("===============>" + createIndexResponse);

    }

    /**
     * 获取索引 判断是否存在
     */
    @Test
    void getIndexTest() throws IOException {
        GetIndexRequest zhuandafa3 = new GetIndexRequest("zhuandafa3");
        // 判断索引是否存在
        boolean exists = client.indices().exists(zhuandafa3, RequestOptions.DEFAULT);
        System.out.println("===============>" + exists);
        GetIndexResponse getIndexResponse =
                client.indices().get(zhuandafa3, RequestOptions.DEFAULT);
        System.out.println("===============>" + getIndexResponse);
    }

    /**
     * 删除索引
     */
    @Test
    void delIndexTest() throws IOException {
        DeleteIndexRequest zhuandafa3 = new DeleteIndexRequest("zhuandafa3");
        AcknowledgedResponse delete = client.indices().delete(zhuandafa3, RequestOptions.DEFAULT);
        System.out.println("===============>" + delete.isAcknowledged());
    }

    /**
     * 添加文档
     */
    @Test
    void addDocumentTest() throws IOException {
        User user = User.builder().name("御坂美琴10").age("18").birthday("1949-10-01").desc("国庆").build();
//        User user1 = new User("赚小花", "20", "2000-01-01", "啥也不知道");
        IndexRequest request = new IndexRequest("zhuandafa4");
//        request.id("1");
        // 默认不用写也行
//        request.timeout(TimeValue.timeValueSeconds(1));

        request.source(JSON.toJSONString(user), XContentType.JSON);
        IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
        System.out.println(indexResponse.status());
        System.out.println(indexResponse);

    }

    /**
     * 批量添加文档
     */
    @Test
    void bulkDocumentTest() throws IOException {
        BulkRequest bulkRequest = new BulkRequest("zhuandafa3");
        List<User> userList = Lists.newArrayList();
        userList.add(new User("御坂美琴1", "16", "2000-01-01", "啥也不知道"));
        userList.add(new User("御坂美琴2", "16", "2000-01-01", "啥也不知道"));
        userList.add(new User("御坂美琴3", "16", "2000-01-01", "啥也不知道"));
        userList.add(new User("御坂美琴4", "16", "2000-01-01", "啥也不知道"));
        userList.add(new User("御坂美琴5", "16", "2000-01-01", "啥也不知道"));
        userList.add(new User("御坂美琴6", "16", "2000-01-01", "啥也不知道"));
        userList.add(new User("御坂美琴7", "16", "2000-01-01", "啥也不知道"));
        userList.add(new User("御坂美琴8", "16", "2000-01-01", "啥也不知道"));
        userList.add(new User("御坂美琴9", "16", "2000-01-01", "啥也不知道"));
        userList.add(new User("御坂美琴10", "16", "2000-01-01", "啥也不知道"));
        //  批处理请求
        for (int i = 0; i < userList.size(); i++) {
            bulkRequest.add(new IndexRequest().id(String.valueOf(i + 1))
                    .source(JSON.toJSONString(userList.get(i)), XContentType.JSON));
        }
        BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.hasFailures()); // 返回false代表成功
    }

    /**
     * 更新文档
     */
    @Test
    void updateDocumentTest() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("zhuandafa3", "1");
        updateRequest.timeout(TimeValue.timeValueSeconds(1));
        User user = User.builder().age("28").build();
        updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
        UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(update.status());
    }

    /**
     * 删除文档
     */
    @Test
    void delDocumentTest() throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest("zhuandafa3", "EDnC2IIBwEZxft8byGgM");
        deleteRequest.timeout(TimeValue.timeValueSeconds(1));
        DeleteResponse delete = client.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println(delete.status());
    }

    /**
     * 查询
     */
    @Test
    void searchDocumentTest() throws IOException {
        // "zhuandafa3", "zhuandafa4" 不传index表示查全部索引
        SearchRequest searchRequest = new SearchRequest("zhuandafa3");
//        SearchRequest searchRequest = new SearchRequest();
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        // 如果是中文 不用中文分词器可能会有问题  .keywor表示不使用分词器
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name.keyword", "御坂美琴10");
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "御坂美琴");
//        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
        searchSourceBuilder.query(termQueryBuilder);
        searchSourceBuilder.query(matchQueryBuilder);
//        searchSourceBuilder.fetchSource(false);
//        searchSourceBuilder.timeout(TimeValue.timeValueSeconds(60));
        searchRequest.source(searchSourceBuilder);
        SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(search.getHits().getTotalHits().value));
        for (SearchHit hit : search.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
        }
    }
}