前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【elasticsearch系列】SpringBoot整合elasticsearch客户端

【elasticsearch系列】SpringBoot整合elasticsearch客户端

作者头像
沁溪源
发布2021-12-01 09:55:58
7940
发布2021-12-01 09:55:58
举报
文章被收录于专栏:沁溪源沁溪源

目录

文档

Elasticsearch: 权威指南 Java REST Client

在这里插入图片描述
在这里插入图片描述

可以跟着官网示例写demo

工欲善其事必先利其器,对于ES数据的查看,首先先安装一个谷歌浏览器的插件ElasticSearch Head,便于大家后期确认测试数据是否成功;

ElasticSearch Head

谷歌浏览器左上角存在一个“应用”标签,进入谷歌的应用商店;

在这里插入图片描述
在这里插入图片描述

搜索""安装成为扩展程序即可;然后打开,输入自己的ES服务地址,连接集群即可;

在这里插入图片描述
在这里插入图片描述

插件安装好之后,进入实践项目;

实践

1、pom.xml

代码语言:javascript
复制
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.15.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>

2、配置文件

代码语言:javascript
复制
server:
  port: 8096
spring:
  application:
    name: elasticsearch

elasticsearch:
  host: #{自定义服务器地址},例如127.0.0.1
  port: 9200 端口
  scheme: http

3、配置类

代码语言:javascript
复制
@Configuration
public class ElasticsearchConfig {

    @Value("${elasticsearch.host}")
    private String host;

    @Value("${elasticsearch.port}")
    private Integer port;

    @Value("${elasticsearch.scheme}")
    private String scheme;

    /**
     * 创建es客户端,设置主机服务器
     *
     * @return
     */
    @Bean
    public RestHighLevelClient restHighLevelClient() {

        RestClientBuilder builder = RestClient.builder(
                //单机部署
                new HttpHost(host, port, scheme)
        );

        return new RestHighLevelClient(builder);
    }
}

5、工具类

代码语言:javascript
复制
@Slf4j
public class ElasticsearchUtil {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    //请求选项:设置授权等
    public static final RequestOptions COMMON_OPTIONS;

    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
        //设置授权
        //builder.addHeader("Authorization", "Bearer " + TOKEN);
        //自定义消费响应
        //builder.setHttpAsyncResponseConsumerFactory(
        //new HttpAsyncResponseConsumerFactory
        //.HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
        COMMON_OPTIONS = builder.build();
    }


    /**
     * 创建索引
     *
     * @param elasticsearchIndex
     * @throws IOException
     */
    public void createIndex(ElasticsearchIndex elasticsearchIndex) throws IOException {
        if (elasticsearchIndex == null) {
            return;
        }
        IndexRequest indexRequest = new IndexRequest(elasticsearchIndex.getIndex());
        indexRequest.id(elasticsearchIndex.getId());
        //注意:json方式存入
        indexRequest.source(elasticsearchIndex.getLogContent(), XContentType.JSON);
        IndexResponse indexResponse = restHighLevelClient.index(indexRequest, COMMON_OPTIONS);
        log.info("create es index success, response:{}", indexResponse);
    }

    /**
     * 判断索引是否存在
     *
     * @param index
     * @return
     * @throws IOException
     */
    public boolean existsIndex(String index) throws IOException {
        GetRequest request = new GetRequest(index);
        boolean exists = restHighLevelClient.exists(request, COMMON_OPTIONS);
        log.info("existsIndex: " + exists);
        return exists;
    }
todo 后面关于索引、文档等各类工具类自定义补充,此处简单举例说明而已

}

6、ES实体

代码语言:javascript
复制
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ElasticsearchIndex {
    /**
     * 索引名字
     */
    private String index;

    /**
     * 索引类型
     */
    private String type;

    /**
     * 文档记录id
     */
    private String id;

    /**
     * 内容
     */
    private String content;

}

封装一个实体对象,统一交互ES;

7、单测

注意:此处文档内容直接封装成JSON格式,故工具类创建索引时采用JSON类型,如果需要改动,可以自定义;

代码语言:javascript
复制
public class ElasticsearchTest {
    @Autowired
    private ElasticsearchUtil elasticSearchUtil;


    @Test
    public void test() throws IOException {
        String content = "{\"name\":\"测试\"}";
        ElasticsearchIndex index = ElasticsearchIndex.builder()
                .index("test_index")
                .id(UUID.randomUUID().toString().replace("-",""))
                .logContent(content)
                .build();
        elasticSearchUtil.createIndex(index);
    }



}

通过插件查看测试索引和文档是否创建成功

在这里插入图片描述
在这里插入图片描述

踩坑点

[testIndex] ElasticsearchStatusException[Elasticsearch exception [type=invalid_index_name_exception, reason=Invalid index name [testIndex], must be lowercase] 溪源更开始入门时,定义索引名字时,按照Java规范定义驼峰格式testIndex,发现报以上错误,报错信息也是提示我们索引名字必须以小写格式,故定义索引等其他字段时可以参考MySQL数据库字段格式要求,"_"下划线连接多个字段;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 文档
  • ElasticSearch Head
  • 实践
  • 踩坑点
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档