其實使用SpringBoot
項目玩ES的時候,人家本身是提供了一個注解@Docment
是可以自動在項目啟動的時候創(chuàng)建ES索引的!
只不過沒用,因為ES
的版本在升級,ElasticsearchRestTemplate
配套的腳手架也在升級,所以你會在網(wǎng)上遇到一個情況:搜到的各類解決方案可能都太適配你的情況,搜到個方法吧,邏輯OK,但是拿進來項目里邊一用,方法過時了,撲街了,囧~
本身項目啟動時自動創(chuàng)建ES索引的方式有兩種:文章來源:http://www.zghlxwxcb.cn/news/detail-773252.html
1、使用自帶注解@Docment(不推薦)
當你興致勃勃的想著簡單使用這個注解躺平時,你發(fā)現(xiàn)這TMD壓根不起作用,還不能自定義修改settings
.文章來源地址http://www.zghlxwxcb.cn/news/detail-773252.html
2、項目啟動時自定義創(chuàng)建
package com.test;
/**
* ES初始化創(chuàng)建索引
*/
@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已經(jīng)存有索引,則不做任何操作,如果沒有索引,則新建索引
* @param args
* @throws Exception
*/
@Override
public void run(String... args) throws Exception {
log.info("[ES]開始創(chuàng)建索引{}...", "test_index");
//讀取json文件內(nèi)的字符內(nèi)容
String esSettingStr = IOUtils.toString(esSetting.getInputStream(), Charset.forName("utf-8"));
//將json數(shù)據(jù)轉(zhuǎn)為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]創(chuàng)建索引{}完成.", "test_index");
}else{
log.info("[ES]索引{}已存在.", "test_index");
}
}
}
到了這里,關(guān)于ES簡單教程(五)使用ElasticsearchRestTemplate手動生成ES索引 項目啟動自動生成ES索引的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!