spring elasticsearch:启动项目时自动创建索引

这篇具有很好参考价值的文章主要介绍了spring elasticsearch:启动项目时自动创建索引。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0.引言

在springboot整合spring data elasticsearch项目中,当索引数量较多,mapping结构较为复杂时,我们常常希望启动项目时能够自动创建索引及mapping,这样就不用再到各个环境中创建索引了

所以今天咱们就来看看如何自动创建索引

  1. 引入依赖

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
  1. 创建es实体类

@Data
@Configuration
@Document(indexName = "es_log")
public class EsLogEntity {
    @Id
    @ApiModelProperty("主键id")
    @Field(type = FieldType.Keyword)
    private String id;
    /**
     * 类型名称
     */
    @ApiModelProperty(value = "类型名称")
    @Field(type = FieldType.Text, analyzer = "ik_smart")
    private String logName;
  }
  1. 利用createIndex属性实现

如股票使用的是spring data elasticsearch包,其@Document注解中包含了一个createIndex属性,默认为true,也就是默认开启了自动创建索引的,想要关闭也可通过设置为false来实现。

  1. 利用反射实现

1 因为要调用ElasticsearchRestTemplate,所以要提前声明其bean


@Configuration
@Component
public class EsConfig {

    @Value("${ES.ip}")
    private String esIp;
    @Value("${ES.port}")
    private Integer esPort;
    @Value("${ES.userName}")
    private String userName;
    @Value("${ES.password}")
    private String password;


    @Bean
    public RestHighLevelClient restHighLevelClient() {
        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
        return new RestHighLevelClient(
                RestClient.builder(new HttpHost(esIp, esPort, "http"))
                        .setRequestConfigCallback(builder -> {
                            // 连接超时(默认为1秒)
                            builder.setConnectTimeout(10000);
                            // 套接字超时(默认为30秒)
                            builder.setSocketTimeout(60000);
                            return builder;
                        })
                        .setHttpClientConfigCallback(builder -> {
                            // 线程数
                            return builder.setDefaultIOReactorConfig(IOReactorConfig.custom().setIoThreadCount(1).build());
//                             builder;
                        })
                //密码访问
                .setHttpClientConfigCallback(f -> f.setDefaultCredentialsProvider(credentialsProvider))
        );
    }
}

2 首先要获取所有添加@Document注解的实体类,我们需要通过Reflections类来实现

添加依赖

<dependency>
            <groupId>org.reflections</groupId>
            <artifactId>reflections</artifactId>
            <version>0.9.11</version>
</dependency>

获取方法如下,其中com.xxx.xxx.entity是实体类的包名文章来源地址https://www.toymoban.com/news/detail-510254.html

Reflections f = new Reflections("com.xxx.xxx.entity");
Set<Class<?>> classSet = f.getTypesAnnotatedWith(Document.class);

3 创建项目启动后调用的配置类


@Configuration
@Slf4j
@AllArgsConstructor
public class ElasticSearchStartCreateIndex implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    private ElasticsearchRestTemplate restTemplate;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        log.info("[elastic]索引初始化...");
        Reflections f = new Reflections("com.xxx.xxx.entity");
        Set<Class<?>> classSet = f.getTypesAnnotatedWith(Document.class);
        for (Class<?> clazz : classSet) {
            IndexOperations indexOperations = restTemplate.indexOps(clazz);
            if (!indexOperations.exists()) {
                indexOperations.create();
                log.info(String.format("[elastic]索引%s数据结构创建成功", clazz.getSimpleName()));
            } else {
                log.info(String.format("[elastic]索引%s数据结构更新成功", clazz.getSimpleName()));
            }
            indexOperations.putMapping(indexOperations.createMapping(clazz));
        }
        log.info("[elastic]索引初始化完毕");
    }
}

到了这里,关于spring elasticsearch:启动项目时自动创建索引的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • ES简单教程(五)使用ElasticsearchRestTemplate手动生成ES索引 项目启动自动生成ES索引

    其实使用 SpringBoot 项目玩ES的时候,人家本身是提供了一个注解 @Docment 是可以自动在项目启动的时候创建ES索引的! 只不过没用,因为 ES 的版本在升级, ElasticsearchRestTemplate 配套的脚手架也在升级,所以你会在网上遇到一个情况:搜到的各类解决方案可能都太适配你的情况,

    2024年02月03日
    浏览(60)
  • Spring Boot Elasticsearch7.6.2实现创建索引、删除索引、判断索引是否存在、获取/添加/删除/更新索引别名、单条/批量插入、单条/批量更新、删除数据、递归统计ES聚合的数据

    注意:我的版本是elasticsearch7.6.2、spring-boot-starter-data-elasticsearch-2.5.6 引入依赖 有时候你可能需要查询大批量的数据,建议加上下面配置文件

    2024年02月13日
    浏览(70)
  • Spring Boot项目在Windows上的自启动策略与Windows自动登录配置

    🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言

    2024年02月07日
    浏览(62)
  • elasticsearch索引操作,索引创建、索引更新、索引删除

    创建索引 更新索引,添加字段 注意更新索引时与创建索引大致一样,只是更新索引时候的url不同,需要在后面加一个 _mapping 路径,同时请求的json里面不需要 mappings 路径,只需要 properties 即可 更新索引,修改配置 同理在更新setting的时候和更新maping的时候一样 获取索引结构

    2024年02月11日
    浏览(43)
  • 模仿Activiti工作流自动建表机制,实现Springboot项目启动后自动创建多表关联的数据库与表的方案

    文/朱季谦 熬夜写完,尚有不足,但仍在努力学习与总结中,而您的点赞与关注,是对我最大的鼓励! 在一些本地化项目开发当中,存在这样一种需求,即开发完成的项目,在第一次部署启动时,需能自行构建系统需要的数据库及其对应的数据库表。 若要解决这类需求,其实

    2024年01月24日
    浏览(54)
  • elasticsearch创建索引模板

    在es数据保存数据,数据量很大时,如日志记录,监控数据等,需要按月或者按日分索引保存,需要创建统一模板来规定数据格式。 可以通过kibana创建 创建模板 创建template之后创建索引

    2024年02月11日
    浏览(47)
  • elasticSearch创建索引库、映射、文档

    创建索引库 使用postman或curl这样的工具创建 参数: number_of_shards:设置分片的数量,在集群中通常设置多个分片,表示一个索引库将拆分成多片分别存储不同的结点,提高了ES的处理能力和高可用性,入门程序使用单机环境,这里设置为1。 number_of_replicas:设置副本的数量,设

    2024年02月04日
    浏览(46)
  • elasticsearch中手动创建索引失败

    想通过kibana的dev tool工具或者cerebro工具的rest来手动创建索引 创建失败,错误代码403,错误提示:“reason”: “action [indices:admin/create] is unauthorized for user [分配的es用户名]”} 报错提示: 每个用户在分配用户和角色时被固定了索引格式,如果你的请求操作的目标索引不存在于

    2024年02月13日
    浏览(46)
  • 使用elasticsearch创建索引时报错

    最近在使用时创建索引的时候 , 出现以上的错误 我的代码如下 : 这个时候出现错误 错误详细信息如下: 解决方法 : 这是因为在使用create方法时 , 会有两个选择 , 其中一个已经过时了 解决 : 查看自己导入的包是哪个 , 使用这个包就可以正常运行了

    2024年02月11日
    浏览(38)
  • ElasticSearch 创建索引超时(ReadTimeoutError)

    在 Python 中调用 client.indices.create 来创建 ElasticSearch 索引时,报如下错误: 在查阅网络资料时,一开始以为是字面意思上的连接超时问题,但调大 timeout 参数也一样报错,而且之前用相同方法创建类似索引时并未出现该问题。 最后,受博文(https://blog.csdn.net/ckq707718837/article

    2024年04月22日
    浏览(69)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包