• SpringBoot + ES基本项目搭建实例


    【搜索系列】ES基本项目搭建

    之前一直没有写ES相关的博文,现在开始补课,预计5-6篇博文将es的使用姿势展示给各位小伙伴;本文将作为es结合springboot的第一篇博文,基本项目环境搭建

    I. 项目搭建

    1. 项目依赖

    本项目借助SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA进行开发

    开一个web服务用于测试

    <dependencies>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
        </dependency>
    </dependencies>
    

    2. 配置信息

    配置文件application.yml,注意下面的配置信息,下面采用的是由我们自己来解析配置的方式

    elasticsearch:
      host: localhost
      port: 9200
      user: elastic
      pwd: test123
      connTimeout: 3000
      socketTimeout: 5000
      connectionRequestTimeout: 500
    

    说明

    上面配置介绍的是一种偏基础的es文档操作姿势,相比较于封装得更好的spring-boot-starter-data-elasticsearch,使用更加灵活

    II. SpringBoot结合ES使用

    1. RestHighLevelClient 初始化

    接下来我们基于RestHighLevelClient来操作es,首先第一步就是需要初始化这实例

    @Getter
    @Configuration
    public class ElasticsearchConfiguration {
    
        @Value("${elasticsearch.host}")
        private String host;
    
        @Value("${elasticsearch.port}")
        private int port;
    
        @Value("${elasticsearch.connTimeout}")
        private int connTimeout;
    
        @Value("${elasticsearch.socketTimeout}")
        private int socketTimeout;
    
        @Value("${elasticsearch.connectionRequestTimeout}")
        private int connectionRequestTimeout;
    
        @Value("${elasticsearch.user}")
        private String user;
    
        @Value("${elasticsearch.pwd}")
        private String pwd;
    
        @Bean(destroyMethod = "close", name = "client")
        public RestHighLevelClient initRestClient() {
            RestClientBuilder builder = RestClient.builder(new HttpHost(host, port))
                    .setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder
                            .setConnectTimeout(connTimeout)
                            .setSocketTimeout(socketTimeout)
                            .setConnectionRequestTimeout(connectionRequestTimeout));
            return new RestHighLevelClient(builder);
        }
    }
    

    注意上面的实现,用户名 + 密码并没有使用,当es设置了用户名、密码之后,是通过每次请求时,在请求头基于Basic Auth方式进行身份验证的;后面会介绍到

    2. 基本使用

    我们在本机搭建了一个es用于模拟测试,在上面的配置完之后,就可以直接与es进行交互了

    es安装可以参考:

    下面是一个简单的使用姿势

    @Service
    public class EsTest {
        @Autowired
        private RestHighLevelClient client;
    
        private static String auth;
    
        public EsTest(ElasticsearchConfiguration elasticsearchConfiguration) {
            auth = Base64Utils.encodeToString((elasticsearchConfiguration.getUser() + ":" + elasticsearchConfiguration.getPwd()).getBytes());
            auth = "Basic " + auth;
        }
    
        public void testGet() throws Exception {
            // 文档查询
            GetRequest getRequest = new GetRequest("first-index", "_doc", "gvarh3gBF9fSFsHNuO49");
            RequestOptions.Builder requestOptions = RequestOptions.DEFAULT.toBuilder();
            requestOptions.addHeader("Authorization", auth);
            GetResponse getResponse = client.get(getRequest, requestOptions.build());
            if (getResponse.isExists()) {
                String sourceAsString = getResponse.getSourceAsString();
                System.out.println(sourceAsString);
            } else {
                System.out.println("no string!");
            }
        }
    }
    

    注意上面的实现,有下面几个重要知识点

    身份验证

    采用Basic Auth方式进行身份校验,简单来说就是在请求头中添加一个

    • key = Authorization
    • value = "Basic " + base64(user + ":" + pwd)

    访问姿势

    上面是一个根据id查询文档的实例,简单可以理解为三步

    • 创建:XxRequest
    • 添加请求头:RequestOptions.Builder.addHeader
    • 执行: client.get(xxRequest, RequestOptions)

    III. 不能错过的源码和相关知识点

    0. 项目

    1. 微信公众号: 一灰灰Blog

    尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

    下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

    一灰灰blog

  • 相关阅读:
    Latin1的所有字符编码
    Qt自定义委托在QTableView中绘制控件、图片、文字(内容比较全)
    Delphi5 update1的序列号
    Access Violation at address 00000000.Read of address 00000000 解决办法
    RealThinClient学习(一)
    使用WebDriver遇到的那些坑
    谱聚类(Spectral Clustering)详解
    Asp.net Mvc4默认权限详细(上)
    ASP.NET Web API中的JSON和XML序列化
    [珠玑之椟]估算的应用与Little定律
  • 原文地址:https://www.cnblogs.com/yihuihui/p/16073967.html
Copyright © 2020-2023  润新知