SpringBoot整合ES7.12.1

阿里云教程2个月前发布
12 0 0

通过Kibana来创建mapping

PUT user_db/
{
  "mappings": {
    "properties": {
      "id":{
        "type": "keyword",
        "index": true
        
      },
      "name":{
        "type": "text",
        "analyzer": "ik_max_word"
        , "index": true
      },
      "age":{
        "type": "integer"
        , "index": true
      }
    }
  }
}

SpringBoot整合ES7.12.1

pom依赖

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


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.12.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>elasticsearch</artifactId>
                    <groupId>org.elasticsearch</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.12.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.66</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

elasticsearch-rest-high-level-client高级客户端配置


import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.nio.entity.NStringEntity;
import org.elasticsearch.action.admin.indices.alias.Alias;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.common.xcontent.json.JsonXContent;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;
import java.util.ArrayList;

/**
 * @Author: dawang
 * @Date: 2020/3/17 18:08
 */
@Slf4j
@Configuration
public class EsConfig {


    private static String hosts = "192.168.0.167"; // 集群地址,多个用,隔开
    //private static int port = 9200; // 使用的端口号
    private static int port = 9200; // 使用的端口号
    private static String schema = "http"; // 使用的协议
    private static ArrayList<HttpHost> hostList = null;

    private static int connectTimeOut = 5000; // 连接超时时间
    private static int socketTimeOut = 30000; // 连接超时时间
    private static int connectionRequestTimeOut = 1000; // 获取连接的超时时间

    private static int maxConnectNum = 100; // 最大连接数
    private static int maxConnectPerRoute = 100; // 最大路由连接数
    private static RestHighLevelClient highLevelClient;
		/********************************************************************************/
    /*********************以上配置都可以通过application.yml来配置*************************/
    /********************************************************************************/
    static {
        hostList = new ArrayList<>();
        String[] hostStrs = hosts.split(",");
        for (String host : hostStrs) {
            hostList.add(new HttpHost(host, port, schema));
        }
    }
    @Bean
    public  RestHighLevelClient restHighLevelClient() {
        RestClientBuilder builder = RestClient.builder(hostList.toArray(new HttpHost[0]));
        // 异步httpclient连接延时配置
        builder.setRequestConfigCallback(new RestClientBuilder.RequestConfigCallback() {
            @Override
            public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) {
                requestConfigBuilder.setConnectTimeout(connectTimeOut);
                requestConfigBuilder.setSocketTimeout(socketTimeOut);
                requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut);
                return requestConfigBuilder;
            }
        });
        // 异步httpclient连接数配置
        builder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
            @Override
            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                httpClientBuilder.setMaxConnTotal(maxConnectNum);
                httpClientBuilder.setMaxConnPerRoute(maxConnectPerRoute);
                return httpClientBuilder;
            }
        });
        RestHighLevelClient client = new RestHighLevelClient(builder);
        log.info("创建RestHighLevelClient成功:{}",client);
        return client;
    }


    public static int getNowPage(Integer nowPage) {
        if (nowPage == null || nowPage <= 0) {
            return 0;
        } else {
            return nowPage -= 1;
        }
    }

    public static int getPageSize(Integer pageSize) {
        if (pageSize == null || pageSize <= 0) {
            return 10;
        } else {
            return pageSize;
        }

    }

}

基本增删改查测试


import com.alibaba.fastjson.JSON;
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.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
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.core.GetSourceRequest;
import org.elasticsearch.client.core.GetSourceResponse;
import org.elasticsearch.cluster.metadata.MetadataIndexTemplateService;
import org.elasticsearch.common.xcontent.XContent;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
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 java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@SpringBootTest
class EsApplicationTests {
    @Autowired
    RestHighLevelClient restHighLevelClient;

    //根据id查询
    @Test
    void contextLoads() {
        GetSourceRequest getSourceRequest = new GetSourceRequest("user_db", "b-q0Y3kBJJfAIo_YKexY");

        try {
            GetSourceResponse documentFields = restHighLevelClient.getSource(getSourceRequest, RequestOptions.DEFAULT);
            System.out.println(documentFields.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //复合查询
    @Test
    void context() throws Exception {
        SearchRequest searchRequest = new SearchRequest("user_db");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("id", "abc");
        searchSourceBuilder.query(termQueryBuilder);
        searchRequest.source(searchSourceBuilder);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(search.toString());
    }

    //是否存在
    public boolean exists(String index, String id) throws Exception {
        GetRequest getRequest = new GetRequest(index, id);
        boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
        return exists;
    }

    //修改
    @Test
    public void test01()throws Exception{
        String id="b-q0Y3kBJJfAIo_YKexY";
        if (exists("user_db",id)) {
            UpdateRequest updateRequest = new UpdateRequest("user_db",id);
            updateRequest.doc(createJson(new User("1","王二小",20)),XContentType.JSON);
            UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
            System.out.println(update.toString());
        }

    }


    //根据id删除文档
    @Test
    public void test03() throws Exception {
        DeleteRequest user_db = new DeleteRequest("user_db");
        user_db.id("b-q0Y3kBJJfAIo_YKexY");
        DeleteResponse delete = restHighLevelClient.delete(user_db, RequestOptions.DEFAULT);
        System.out.println(delete.toString());
    }


    //批量操作
    @Test
    public void test02() throws Exception {
        BulkRequest bulkRequest = new BulkRequest("user_db");
        IndexRequest indexRequest = new IndexRequest();
        User user = new User("adki", "李四2", 18);
        indexRequest.id(user.getId());
        indexRequest.source(createMap(user));
        bulkRequest.add(indexRequest);
        UpdateRequest updateRequest = new UpdateRequest();
        updateRequest.id("b-q0Y3kBJJfAIo_YKexY");
        updateRequest.doc(createMap(new User("kkkk", "万物", 11)));
        bulkRequest.add(updateRequest);
        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.toString());

    }


    private <T> Map createMap(T t) {
        String string = JSON.toJSONString(t);
        Map map = JSON.parseObject(string, Map.class);
        return map;
    }

    private <T> String createJson(T t) {
        String string = JSON.toJSONString(t);
        return string;
    }

}

官方API地址:
https://www.elastic.co/guide/en/elasticsearch/client/index.html

SpringBoot整合ES7.12.1

RST高级客户端:
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-supported-apis.html

© 版权声明

相关文章

暂无评论

none
暂无评论...