索引"/>
ElasticSearch 根据环境自动创建动态索引
我的客户端的版本是7.13.0,对应springboot与spring-data-elasticsearch的版本如下:(2.5.8与4.2.7)
引入依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>
@Document(indexName = "#{@active}"+"_"+ElasticSarchConstants.ES_INDEX_PRODUCT) 其中#{@active}"根据开发环境动态切换:package com.qihong.common.es.config;import lombok.Getter;import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component;/*** @author zhg* @create 2022/6/9*/ @Configuration @Component @Getter public class ActiveBean {//读取环境配置@Value("${spring.profiles.active}")private String active;@Beanpublic String active(){return active;} }
1、创建es mapping类
package com.qihong.common.es.domain;import com.qihong.common.es.constant.ElasticSarchConstants;
import lombok.Data;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;/*** @author zhg* @create 2022/6/9*/@Data
@Configuration
@Setting(replicas = 0,shards = 1)
@Document(indexName = "#{@active}"+"_"+ElasticSarchConstants.ES_INDEX_PRODUCT)
public class ProductStoreEs {@Id@Field(type = FieldType.Long)private Long productId;@Field(type = FieldType.Text,analyzer = "ik_smart")private String productName;@Field(type = FieldType.Text,analyzer = "ik_smart")private String storeName;//经纬度保存@GeoPointFieldprivate GeoPoint location;@Field(type = FieldType.Long)private Long siteId;@Field(type = FieldType.Long)private Long storeId;@Field(type = FieldType.Integer)private Integer status;
}
2、启动服务模块自动创建索引,与mapping
package com.qihong.common.es.config;import org.reflections.Reflections;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;import java.util.Set;/*** @author zhg* @create 2022/5/20*/@Configuration
public class ElasticSearchStartCreateIndex implements ApplicationListener<ContextRefreshedEvent> {@Autowiredprivate ElasticsearchRestTemplate restTemplate;@Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {Reflections reflections = new Reflections("com.qihong.common.es.domain");Set<Class<?>> typesAnnotatedWith = reflections.getTypesAnnotatedWith(Document.class);for (Class<?> clazz: typesAnnotatedWith) {if(!restTemplate.indexOps(clazz).exists()){restTemplate.indexOps(clazz).create();restTemplate.indexOps(clazz).putMapping(clazz);}}}
}
更多推荐
ElasticSearch 根据环境自动创建动态索引
发布评论