赞
踩
其实使用SpringBoot
项目玩ES的时候,人家本身是提供了一个注解@Docment
是可以自动在项目启动的时候创建ES索引的!
只不过没用,因为ES
的版本在升级,ElasticsearchRestTemplate
配套的脚手架也在升级,所以你会在网上遇到一个情况:搜到的各类解决方案可能都太适配你的情况,搜到个方法吧,逻辑OK,但是拿进来项目里边一用,方法过时了,扑街了,囧~
本身项目启动时自动创建ES索引的方式有两种:
当你兴致勃勃的想着简单使用这个注解躺平时,你发现这TMD压根不起作用,还不能自定义修改settings
.
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"); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。