--- title: Spring 访问 Elasticsearch date: 2018-12-25 14:06:36 order: 23 categories: - Java - 框架 - Spring - Spring数据 tags: - Java - 框架 - Spring - SpringBoot - elasticsearch permalink: /pages/fedadf18/ --- # Spring 访问 Elasticsearch ## 简介 [Elasticsearch](https://www.elastic.co/elasticsearch) 是一个开源的、分布式的搜索和分析引擎。 ### 通过 REST 客户端连接 Elasticsearch 如果在 classpath 路径下存在 `org.elasticsearch.client:elasticsearch-rest-client` jar 包,Spring Boot 会自动配置并注册一个 `RestClient` Bean,它的默认访问路径为:`localhost:9200`。 你可以使用如下方式进行定制: ```properties spring.elasticsearch.rest.uris=http://search.example.com:9200 spring.elasticsearch.rest.username=user spring.elasticsearch.rest.password=secret ``` 您还可以注册实现任意数量的 `RestClientBuilderCustomizer` bean,以进行更高级的定制。要完全控制注册,请定义 `RestClient` bean。 如果 classpath 路径有 `org.elasticsearch.client:elasticsearch-rest-high-level-client` jar 包,Spring Boot 将自动配置一个 `RestHighLevelClient`,它包装任何现有的 `RestClient` bean,重用其 HTTP 配置。 ### 通过 Jest 连接 Elasticsearch 如果 classpath 上有 Jest,你可以注入一个自动配置的 `JestClient`,默认情况下是 `localhost:9200`。您可以进一步调整客户端的配置方式,如以下示例所示: ```properties spring.elasticsearch.jest.uris=http://search.example.com:9200 spring.elasticsearch.jest.read-timeout=10000 spring.elasticsearch.jest.username=user spring.elasticsearch.jest.password=secret ``` 您还可以注册实现任意数量的 `HttpClientConfigBuilderCustomizer` bean,以进行更高级的定制。以下示例调整为其他 HTTP 设置: ```java static class HttpSettingsCustomizer implements HttpClientConfigBuilderCustomizer { @Override public void customize(HttpClientConfig.Builder builder) { builder.maxTotalConnection(100).defaultMaxTotalConnectionPerRoute(5); } } ``` 要完全控制注册,请定义 `JestClient` bean。 ### 通过 Spring Data 访问 Elasticsearch 要连接到 Elasticsearch,您必须提供一个或多个集群节点的地址。可以通过将 `spring.data.elasticsearch.cluster-nodes` 属性设置为以逗号分隔的 `host:port` 列表来指定地址。使用此配置,可以像任何其他 Spring bean 一样注入 `ElasticsearchTemplate` 或 `TransportClient`,如以下示例所示: ```java spring.data.elasticsearch.cluster-nodes=localhost:9300 @Component public class MyBean { private final ElasticsearchTemplate template; public MyBean(ElasticsearchTemplate template) { this.template = template; } // ... } ``` 如果你添加了自定义的 `ElasticsearchTemplate` 或 `TransportClient` `@Bean` ,就会替换默认的配置。 ### Elasticsearch Repositories Spring Data 包含对 Elasticsearch 的 repository 支持。基本原则是根据方法名称自动为您构建查询。 事实上,Spring Data JPA 和 Spring Data Elasticsearch 共享相同的通用基础架构。 ## 源码 完整示例:[源码](https://github.com/dunwu/spring-boot-tutorial/tree/master/codes/spring-boot-data-elasticsearch) 使用方法: ```bash mvn clean package cd target java -jar spring-boot-data-elasticsearch.jar ``` ## 版本 Spring 和 Elasticsearch 匹配版本: | Spring Data Elasticsearch | Elasticsearch | Spring Framework | Spring Boot | | :------------------------------------------------------------------------------------------------------: | :-----------: | :--------------: | :---------: | | 5.0.x | 8.5.3 | 6.0.x | 3.0.x | | 4.4.x | 7.17.3 | 5.3.x | 2.7.x | | 4.3.x | 7.15.2 | 5.3.x | 2.6.x | | 4.2.x[[1](https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#_footnotedef_1)] | 7.12.0 | 5.3.x | 2.5.x | | 4.1.x[[1](https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#_footnotedef_1)] | 7.9.3 | 5.3.2 | 2.4.x | | 4.0.x[[1](https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#_footnotedef_1)] | 7.6.2 | 5.2.12 | 2.3.x | | 3.2.x[[1](https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#_footnotedef_1)] | 6.8.12 | 5.2.12 | 2.2.x | | 3.1.x[[1](https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#_footnotedef_1)] | 6.2.2 | 5.1.19 | 2.1.x | | 3.0.x[[1](https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#_footnotedef_1)] | 5.5.0 | 5.0.13 | 2.0.x | | 2.1.x[[1](https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#_footnotedef_1)] | 2.4.0 | 4.3.25 | 1.5.x | ## 参考资料 - **官方** - [Elasticsearch 官网](https://www.elastic.co/cn/products/elasticsearch) - [Elasticsearch Github](https://github.com/elastic/elasticsearch) - [Elasticsearch 官方文档](https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html) - [Elasticsearch: The Definitive Guide](https://www.elastic.co/guide/en/elasticsearch/guide/master/index.html) - ElasticSearch 官方学习资料 - [Spring Boot 官方文档之 boot-features-elasticsearch](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-elasticsearch) - [Spring Data Elasticsearch Github](https://github.com/spring-projects/spring-data-elasticsearch) - [Spring Data Elasticsearch 官方文档](https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/)