Elasticsearch 更新太快, Spring Boot 比较延迟,如果想体验最新版本, 需要使用官方 Java API Client。
Elasticsearch Java API Client
Java API Client 特性 :
- 所有 Elasticsearch API 的强类型请求和响应。
- 所有 API 的阻塞和异步版本。
- 在创建复杂的嵌套结构时,使用流利的构建器和功能模式允许编写简洁易读的代码。
- 通过使用对象映射器(例如 Jackson)或任何 JSON-B 实现来无缝集成应用程序类。
- 将协议处理委托给 http 客户端,例如Java 低级 REST 客户端,该客户端 负责处理所有传输级别的问题:HTTP 连接池、重试、节点发现等。
1
2
3
4
5
6
7
8
|
dependencies {
implementation 'co.elastic.clients:elasticsearch-java:8.1.3'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.3'
// Needed only if you use the spring-dependency-management
// and spring-boot Gradle plugins
implementation 'jakarta.json:jakarta.json-api:2.0.1'
}
|
Spring Boot
spring-boot-starter-data-elasticsearch 一定注意 Spring Data Elasticsearch 与 Elasticsearch 的版本匹配,不然会有各种莫名其妙的错误。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
@Override
@Bean
public RestHighLevelClient elasticsearchClient() {
final ClientConfiguration clientConfiguration =
ClientConfiguration.builder().connectedTo("localhost:9200").build();
return RestClients.create(clientConfiguration).rest();
}
}
@Configuration
@EnableElasticsearchRepositories(basePackages = "com.ynthm.library.av.jvadb.repository")
public class ElasticSearchConfiguration {}
|
Java High Level REST Clientedit Deprecated in 7.15.0.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
@Document(indexName = "productindex")
public class Product {
@Id
private String id;
@Field(type = FieldType.Text, name = "name")
private String name;
@Field(type = FieldType.Double, name = "price")
private Double price;
@Field(type = FieldType.Integer, name = "quantity")
private Integer quantity;
@Field(type = FieldType.Keyword, name = "category")
private String category;
@Field(type = FieldType.Text, name = "desc")
private String description;
@Field(type = FieldType.Keyword, name = "manufacturer")
private String manufacturer;
}
public interface ProductRepository extends ElasticsearchRepository<Product, String> {
List<Product> findByName(String name);
List<Product> findByNameContaining(String name);
List<Product> findByManufacturerAndCategory
(String manufacturer, String category);
}
|