Spring Accessing Elasticsearch

Giới thiệu

Elasticsearch là một công cụ tìm kiếm và phân tích phân tán mã nguồn mở.

Kết nối Elasticsearch thông qua REST Client

Nếu có tệp JAR org.elasticsearch.client:elasticsearch-rest-client trong classpath, Spring Boot sẽ tự động cấu hình và đăng ký một Bean RestClient, mặc định là localhost:9200.

Bạn có thể tùy chỉnh như sau:

spring.elasticsearch.rest.uris=http://search.example.com:9200
spring.elasticsearch.rest.username=user
spring.elasticsearch.rest.password=secret

Bạn cũng có thể đăng ký các RestClientBuilderCustomizer bean để tùy chỉnh cao cấp hơn. Để hoàn toàn kiểm soát việc đăng ký, hãy định nghĩa một Bean RestClient.

Nếu có tệp JAR org.elasticsearch.client:elasticsearch-rest-high-level-client trong classpath, Spring Boot sẽ tự động cấu hình một RestHighLevelClient, nó bao gồm bất kỳ RestClient bean nào hiện có và tái sử dụng cấu hình HTTP của nó.

Kết nối Elasticsearch thông qua Jest

Nếu có Jest trong classpath, bạn có thể tiêm vào một JestClient được tự động cấu hình, mặc định là localhost:9200. Bạn có thể tinh chỉnh cấu hình của client như ví dụ dưới đây:

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

Bạn cũng có thể đăng ký các HttpClientConfigBuilderCustomizer bean để tùy chỉnh cao cấp hơn. Ví dụ dưới đây điều chỉnh các thiết lập HTTP khác:

static class HttpSettingsCustomizer implements HttpClientConfigBuilderCustomizer {
 
	@Override
	public void customize(HttpClientConfig.Builder builder) {
		builder.maxTotalConnection(100).defaultMaxTotalConnectionPerRoute(5);
	}
 
}

Để hoàn toàn kiểm soát việc đăng ký, hãy định nghĩa một Bean JestClient.

Truy cập Elasticsearch thông qua Spring Data

Để kết nối với Elasticsearch, bạn phải cung cấp địa chỉ của một hoặc nhiều nút cụm. Bạn có thể chỉ định địa chỉ bằng cách đặt thuộc tính spring.data.elasticsearch.cluster-nodes thành một danh sách host:port phân tách bằng dấu phẩy. Với cấu hình này, bạn có thể tiêm vào ElasticsearchTemplate hoặc TransportClient như bất kỳ bean Spring nào khác, như ví dụ dưới đây:

spring.data.elasticsearch.cluster-nodes=localhost:9300
@Component
public class MyBean {
 
	private final ElasticsearchTemplate template;
 
	public MyBean(ElasticsearchTemplate template) {
		this.template = template;
	}
 
	// ...
 
}

Nếu bạn thêm một @Bean ElasticsearchTemplate hoặc TransportClient tùy chỉnh, nó sẽ thay thế cấu hình mặc định.

Elasticsearch Repositories

Spring Data cung cấp hỗ trợ repository cho Elasticsearch. Nguyên tắc cơ bản là xây dựng truy vấn tự động dựa trên tên phương thức.

Thực tế, Spring Data JPA và Spring Data Elasticsearch chia sẻ cơ sở hạ tầng chung.

Mã nguồn

Ví dụ đầy đủ: Comming soon

Spring và Elasticsearch tương ứng với phiên bản như sau:

Spring Data ElasticsearchElasticsearchSpring FrameworkSpring Boot
5.0.x8.5.36.0.x3.0.x
4.4.x7.17.35.3.x2.7.x
4.3.x7.15.25.3.x2.6.x
4.2.x[1]7.12.05.3.x2.5.x
4.1.x[1]7.9.35.3.22.4.x
4.0.x[1]7.6.25.2.122.3.x
3.2.x[1]6.8.125.2.122.2.x
3.1.x[1]6.2.25.1.192.1.x
3.0.x[1]5.5.05.0.132.0.x
2.1.x[1]2.4.04.3.251.5.x

Tài liệu tham khảo