springboot3整合elasticsearch8.7.0实现为bean对象创建索引添加映射

这篇具有很好参考价值的文章主要介绍了springboot3整合elasticsearch8.7.0实现为bean对象创建索引添加映射。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

准备工作

添加相关依赖

在yml中配置elasticsearch

主要内容

实体类

ElasticSearch配置类

测试

确认当前没有counter索引

启动spring

再次查询counter索引​

在测试类中输出counter索引的映射

官方文档


准备工作

添加相关依赖

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

要注意版本对应关系

spring官方文档中有版本对照表

目前我使用的都是最新的版本,没有问题,未来版本变动请根据版本对照表修改版本

目前(2023.04.19)这个对照表还未写Spring Data Elasticsearch5.0.5对应的es版本(目前的最新版本),最高就写了5.0.1支持8.5.3,不过经过我实测和官方作者的回答,Spring Data Elasticsearch5.0.5是支持es8.7.0的

springboot3整合elasticsearch8.7.0实现为bean对象创建索引添加映射

在yml中配置elasticsearch

spring:
  elasticsearch:
    uris: 127.0.0.1:9200
    username: elastic    #若没有开启es的安全策略,则无需配置用户名与密码
    password: 自己的密码

主要内容

实体类

package com.cns.demo16springbootes.bean;

import lombok.Data;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@Data
@Document(indexName = "counter")
public class Counter {
    @Field(type = FieldType.Keyword)
    private String id;
    @Field(type = FieldType.Integer)
    private Integer length;
    @Field(type = FieldType.Integer)
    private Integer width;
    @Field(type = FieldType.Integer)
    private Integer height;
}

ElasticSearch配置类

package com.cns.demo16springbootes.config;

import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate;
import org.springframework.util.ClassUtils;

import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

@Configuration
public class ElasticSearchConfig {

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;
    private String entityPackage = "com.cns.demo16springbootes.bean";

    // @PostConstruct注解用于在构造方法执行之后,初始化之前执行,只会被执行一次
    // 用于创建索引和添加映射
    @PostConstruct
    public void init() {
        createIndexForAllEntities();
    }

    public void createIndexForAllEntities() {
        // 遍历包下所有的实体类,使用Spring提供的ClassPathScanningCandidateComponentProvider来扫描指定包下的所有类
        // 创建类扫描器
        ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
        
        // 添加过滤器用于扫描带有@Document注解的类
        scanner.addIncludeFilter(new AnnotationTypeFilter(Document.class));
        
        // 调用findCandidateComponents()方法,将实体类所在的包名作为参数传递给它。
        // 返回一个Set类型的结果集,其中包含了实体类所在包下所有带有@Document注解的类。
        Set<BeanDefinition> beanDefinitions = scanner.findCandidateComponents(entityPackage);

        // 使用Java 8的stream()流和map()方法将Set类型转换为List<Class<?>>类型,并将其赋值给classes变量。
        // 将bean定义转化为Class对象
        List<Class<?>> classes = beanDefinitions.stream()
                .map(beanDefinition -> ClassUtils.resolveClassName(
                        beanDefinition.getBeanClassName(), this.getClass().getClassLoader()))
                .collect(Collectors.toList());

        // for()循环遍历所有实体类,检查索引是否存在,如果不存在,则创建新的索引和映射。
        for (Class<?> clazz : classes) {
            
            // 获取Document注解中的索引名
            Document document = clazz.getAnnotation(Document.class);
            String indexName = document.indexName();
            
            // elasticsearch8.x使用的是新的api,与之前版本有些不一样,我目前也在看文档学习
            // 判断索引是否已经存在
            if (!elasticsearchTemplate.indexOps(clazz).exists()) {
                try {
                    // 使用为这个IndexOperations绑定的实体定义的设置和映射创建一个索引。
                    elasticsearchTemplate.indexOps(clazz).createWithMapping();
                    System.out.println("已根据bean对象创建索引并添加映射:" + indexName);
                } catch (Exception e) {
                    System.out.println("添加索引失败:"+indexName);
                    e.printStackTrace();
                }
            } else {
                System.out.println("已存在索引:" + indexName);
            }
        }
    }
}

测试

确认当前没有counter索引

使用apipost发送查询索引请求,确认当前没有counter索引

springboot3整合elasticsearch8.7.0实现为bean对象创建索引添加映射

 可以看出当前查询不到这个索引

启动spring

由于我直接用配置类初始化,相当于spring容器一启动就会注册配置类执行初始化方法

我们启动容器

springboot3整合elasticsearch8.7.0实现为bean对象创建索引添加映射

我先前已经创建过product和operator两个索引,所以提示已存在,counter是新的实体类,所以为它创建了索引 

再次查询counter索引

在测试类中输出counter索引的映射

springboot3整合elasticsearch8.7.0实现为bean对象创建索引添加映射

可以看见输出的映射与实体类注解设置的是一样的 

官方文档

目前我正在学习相关内容,springboot3和es8.7出的是比较新的版本,挺多改动,很多资料不一定适用,建议多看官方文档

ElasticSearch官网

Spring Data Elasticsearch官方文档

Spring Data Elasticsearch的官方api文档文章来源地址https://www.toymoban.com/news/detail-437214.html

到了这里,关于springboot3整合elasticsearch8.7.0实现为bean对象创建索引添加映射的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot整合elasticsearch8

    1.引入maven依赖 2.application.yml添加配置 3.编写config文件 启动demo项目,通过控制台日志查看是否能够正常连接es。 4.在DemoApplicationTests编写简单测试操作es。

    2024年02月12日
    浏览(39)
  • springboot整合elasticsearch8组合条件查询

    整合过程见上一篇文章 springboot整合elasticsearch8 1.es8多条件组合查询 2.使用scroll进行大数据量查询

    2024年02月16日
    浏览(40)
  • springBoot整合ElasticSearch8.x版本

    导入依赖   dependency         groupIdcom.fasterxml.jackson.core/groupId         artifactIdjackson-databind/artifactId         version2.13.2/version   /dependency     dependency         groupIdorg.glassfish/groupId         artifactIdjakarta.json/artifactId         version2.0.1/version   /dependency           dependency  

    2023年04月21日
    浏览(31)
  • SpringBoot3 整合 ElasticSearch7 示例

    做仿牛客项目需要使用 es 做搜索,但是老师示例的是 SpringBoot2 + es6 去做的,然而我用的是 Spring3 + es7.17.10,于是踩了很多的坑。 在 es7 中,配置文件和查询所需的实现类都做了很大的改动,我以能成功运行的代码为例,大概说一下怎么配置和使用。 首先 yml 配置文件发生了变

    2024年02月07日
    浏览(46)
  • java-springboot整合ElasticSearch8.2复杂查询

    近期有大数据项目需要用到es,而又是比较新的es版本,网上也很少有8.x的java整合教程,所有写下来供各位参考。 首先 1.导包: 2.客户端连接代码EsUtilConfigClint: 一开始按照其他博主的方法,长时间连接不操作查询再次调用查询时会报错timeout,所以要设置RequestConfigCallback 3

    2024年02月11日
    浏览(42)
  • elasticsearch8和kibana部署以及与springboot整合遇到的坑

    我本来使用的是最新版本的es 8.6.2。但是由于ik分词器只更新到8.6.1,所以就更改为部署8.6.1。在过程中遇到一些问题,这里做一个总结 环境:windows10 elasticsearch版本:8.6.1 一、修改es 用户密码的方式 二、kibana 使用用户名和密码登录 修改kibana.yml 文件 启动kibana一直闪退 解决方

    2024年02月02日
    浏览(32)
  • 关于springboot整合elasticsearch8.4.3的找不到相关类JsonProvider、JsonProvider的解决方案

    环境是springboot是2.3.7,elasticsearch是8.4.3 关于8.4.3的官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/8.4/installation.html 创建ElasticsearchClient 对象: 一开始报错ClassNotFoundException: jakarta.json.spi.JsonProvider,然后看了下官方文档修改了下jakarta.json-api的版本.解决完成之后

    2024年02月02日
    浏览(47)
  • springboot整合elasticsearch8.2报错unable to parse response body for Response{requestLine

    用postman发出请求,执行saveAll命令的时候发现错误,返回500。 但是很奇怪elsticsearch却能够存进去。版本的话springboot是2.6.4,2.7貌似也不行 查看:官方资料 我们使用savaall会去继承ElasticsearchRepository类,并调用其中的函数。 然而,据图可知,在2022.8月依旧只支持7.17.4,而我的版本

    2024年02月16日
    浏览(32)
  • SpringBoot3整合SpringSecurity,实现自定义接口权限过滤

    接口权限过滤是指对于某些接口或功能,系统通过设定一定的权限规则,只允许经过身份认证且拥有相应权限的用户或应用程序进行访问和操作 。这种技术可以有效地保护系统资源和数据安全,防止未授权的用户或程序进行恶意操作或非法访问。通常情况下,接口权限过滤需

    2024年02月08日
    浏览(41)
  • springboot3整合consul实现服务注册和配置管理快速入门

    服务注册: 配置管理: 注册中心的比较: 在微服务的世界中,服务注册是必不可少的。现在比较流行的也就是Consul和Nacos,Zookeeper没有管理界面,一般不建议使用,而Eureka已经处于停更,并且本身就存在很多bug,一般不建议使用! 我之前写过一篇spring boot整合nacos实现服务注

    2024年04月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包