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

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

本身项目启动时自动创建ES索引的方式有两种

1、使用自带注解@Docment(不推荐)

当你兴致勃勃的想着简单使用这个注解躺平时,你发现这TMD压根不起作用,还不能自定义修改settings.

2、项目启动时自定义创建

package com.test;

/**
 * ES初始化创建索引
 */
@Component
@Order(value = 1)
@Slf4j
public class CreateESIndexConfig implements CommandLineRunner {

    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

	//json文件存储路径为:src/main/resources/es-settings/es_settings.json
    @Value("classpath:es-settings/es_settings.json")
    private Resource esSetting;

    /**
     * 项目启动的时候,如果elasticsearch已经存有索引,则不做任何操作,如果没有索引,则新建索引
     * @param args
     * @throws Exception
     */
    @Override
    public void run(String... args) throws Exception {
        log.info("[ES]开始创建索引{}...", "test_index");
		
		//读取json文件内的字符内容
        String esSettingStr = IOUtils.toString(esSetting.getInputStream(), Charset.forName("utf-8"));
        //将json数据转为Map 因为下面indexOps.create的方法是需要传入Map(settings)和Docment(mapping)
        Map<String, Object> settings = JSONObject.parseObject(esSettingStr).getInnerMap();
        IndexOperations indexOps =
                elasticsearchRestTemplate.indexOps(IndexCoordinates.of("test_index"));
        if(indexOps.exists()==false){
            indexOps.create(settings, indexOps.createMapping(TestIndex.class));
            log.info("[ES]创建索引{}完成.", "test_index");
        }else{
            log.info("[ES]索引{}已存在.", "test_index");
        }
    }
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cgv3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值