Spring Boot提供的Elasticearch的自动配置主要包括:
RestClientAutoConfiguration
:使用RestClientProperties
通过spring.elasticsearch.rest.*
来自动配置Elasticsearch REST客户端。
org.elasticsearch.client:elasticsearch-rest-client
,会自动配置RestClient
;org.elasticsearch.client:elasticsearch-rest-high-level-client
,会自动配置RestHighLevelClient
,它包装了已有的RestCient
的Bean,复用HTTP配置。ElasticsearchRepositoriesAutoConfiguration
:自动通过@EnableElasticsearchRepositories
开启Spring Data Elasticsearch Repository的支持。Elasticsearch Jest客户端支持已弃用;
Elasticsearch TransportClient在 Elasticsearch 7.0.0版本弃用,将在Elasticsearch 8.0版本移除。
通过Rest客户端连接Elasticsearch
spring:
elasticsearch:
rest:
uris: http://localhost:9200
Spring Data为我们提供了下面的注解来定义聚合(聚合概念参考https://blog.csdn.net/wiselyman/article/details/106227455):
@Document
:注解在聚合根上,将此类与Elasticsearch的index映射,可设置index名称喝index类型。@Id
:聚合根的唯一标识,注解在String
类型的id
上,Elasticsearch会自动生成唯一标识。@Field
:表示当前的属性是值或者值对象,可设置与Elasticsearch的Field
相关的设置,如映射的名称,可省略。@Transient
:注解的属性将不会持久化到Elasticsearch那我们的聚合根定义为:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = "person")
public class Person {
@Id
private String id;
private String name;
private Integer age;
private Address address;
Collection<Child> children;
public Person(String name, Integer age, Address address, Collection<Child> children) {
this.name = name;
this.age = age;
this.address = address;
this.children = children;
}
}
另外两个值对象定义为:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Address {
private String city;
private String province;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Child {
private String name;
private Gender gender;
}
定义聚合Repository需继承ElasticsearchRepository
接口。
public interface PersonRepository extends ElasticsearchRepository<Person,String> {
}
ElasticsearchRepository
代理实现是SimpleElasticsearchRepository
需要ElasticsearchOperations
的Bean,而AbstractElasticsearchConfiguration
给我们提供配置Elasticsearch的能力,包括配置好的ElasticsearchOperations
的Bean(ElasticsearchRestTemplate
)。
@Configuration
public class RestEsConfig extends AbstractElasticsearchConfiguration {
private RestHighLevelClient restHighLevelClient;
public RestEsConfig(RestHighLevelClient restHighLevelClient) {
this.restHighLevelClient = restHighLevelClient;
}
@Override
public RestHighLevelClient elasticsearchClient() {
return this.restHighLevelClient;
}
}
我们先保存三条测试数据:
@Bean
CommandLineRunner saveAll(PersonRepository personRepository){
return args -> {
Address address = new Address("he fei", "Anhui");
Collection<Child> children = Arrays.asList(new Child("wyn", Gender.FEMALE),
new Child("wbe", Gender.MALE));
Person person = new Person("wyf", 35, address, children);
Address address1 = new Address("bei jing", "Beijing");
Collection<Child> children1 = Arrays.asList(new Child("aaa", Gender.FEMALE),
new Child("bbb", Gender.MALE));
Person person1 = new Person("foo", 34, address1, children1);
Address address2 = new Address("shang hai", "Shanghai");
Collection<Child> children2 = Arrays.asList(new Child("ccc", Gender.FEMALE),
new Child("ddd", Gender.MALE));
Person person2 = new Person("bar", 36, address2, children2);
personRepository.saveAll(Arrays.asList(person, person1, person2));
};
执行完成后,注释@Bean
,避免重复插入。
我的新书《从企业级开发到云原生微服务:Spring Boot 实战》已出版,内容涵盖了丰富Spring Boot开发的相关知识
购买地址:https://item.jd.com/12760084.html
主要包含目录有:
第一章 初识Spring Boot(快速领略Spring Boot的美丽)
第二章 开发必备工具(对常用开发工具进行介绍:包含IntelliJ IDEA、Gradle、Lombok、Docker等)
第三章 函数式编程
第四章 Spring 5.x基础(以Spring 5.2.x为基础)
第五章 深入Spring Boot(以Spring Boot 2.2.x为基础)
第六章 Spring Web MVC
第七章 数据访问(包含Spring Data JPA、Spring Data Elasticsearch和数据缓存)
第八章 安全控制(包含Spring Security和OAuth2)
第九章 响应式编程(包含Project Reactor、Spring WebFlux、Reactive NoSQL、R2DBC、Reactive Spring Security)
第十章 事件驱动(包含JMS、RabbitMQ、Kafka、Websocket、RSocket)
第11章 系统集成和批处理(包含Spring Integration和Spring Batch)
第12章 Spring Cloud与微服务
第13章 Kubernetes与微服务(包含Kubernetes、Helm、Jenkins、Istio)
多谢大家支持。