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");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/csdn_avatar_2019/article/details/128985771