其实使用SpringBoot
项目玩ES的时候,人家本身是提供了一个注解@Docment
是可以自动在项目启动的时候创建ES索引的!
只不过没用,因为ES
的版本在升级,ElasticsearchRestTemplate
配套的脚手架也在升级,所以你会在网上遇到一个情况:搜到的各类解决方案可能都太适配你的情况,搜到个方法吧,逻辑OK,但是拿进来项目里边一用,方法过时了,扑街了,囧~
本身项目启动时自动创建ES索引的方式有两种:文章来源:https://www.toymoban.com/news/detail-773252.html
1、使用自带注解@Docment(不推荐)
当你兴致勃勃的想着简单使用这个注解躺平时,你发现这TMD压根不起作用,还不能自定义修改settings
.文章来源地址https://www.toymoban.com/news/detail-773252.html
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");
}
}
}
到了这里,关于ES简单教程(五)使用ElasticsearchRestTemplate手动生成ES索引 项目启动自动生成ES索引的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!