前言
ES在Elasticsearch7.15后将高级客户端 RestHighLevelClient弃用,同时推出了全新的 Java API Client Elasticsearch Java API Client ,7.17版本的High Level REST 客户端可以与 8.X 版本以兼容模式运行。
RestHighLevelClient的弃用原因:
1.客户端太重,相关以来超过30MB。
2.一致性差,需要大量维护工作。
3.没有继承json/object类型映射
Elasticsearch Java API 客户端官方定义:
Elasticsearch Java API 客户端为所有的 Elasticsearch API 提供请求和响应处理。
它将请求处理转给 Elasticsearch Low Level REST 客户端,这也是 High Level 被废弃而 Low Level REST 客户端依然健在的原因,Low Level REST 客户端负责处理 Http 连接建立和池化、重试机制等所有传输级别的问题。
Elasticsearch Java API Client 三个特点:
1).对象的构建基于构建者模式
2).可以使用lambda构建嵌套对象,从而编写干净、富有表现力的DSL。
3).应用程序类能自动映射为Mapping
创建
1.项目工程导包
官方:Installation | Elasticsearch Java API Client [7.17] | Elastic
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>7.17.23</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.0</version>
</dependency>
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>2.0.1</version>
</dependency>
2.创建链接
官方:Connecting | Elasticsearch Java API Client [7.17] | Elastic
@Bean
public ElasticsearchClient esRestClient() {
// 创建REST客户端
RestClient restClient = RestClient.builder(
new HttpHost("localhost", 9200)).build();
//创建传输层
ElasticsearchTransport transport = new RestClientTransport(
restClient, new JacksonJsonpMapper());
//创建elasticsearch客户端
ElasticsearchClient esClient = new ElasticsearchClient(transport);
try {
transport.close();
} catch (IOException e) {
e.printStackTrace();
}
return esClient;
}
3.编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest
class SearchApplicationTests {
@Autowired
ElasticSearchConfig elasticSearchConfig;
@Test
public void contextLoads() throws IOException {
ElasticsearchClient elasticsearchClient = elasticSearchConfig.esRestClient();
GetIndexResponse all = elasticsearchClient.indices().get(query -> query.index("new_bank"));
System.out.printf("all.toString()=");
System.out.printf(all.toString());
}
}
结果:
4.查询某一个索引下的数据
@Test
public void contextLoads() throws IOException {
ElasticsearchClient elasticsearchClient = elasticSearchConfig.esRestClient();
GetResponse<Map> response = elasticsearchClient.get(builder -> builder.index("new_bank").id("13"), Map.class);
Map source = response.source();
source.forEach((x,y)->{
System.err.println(x+":"+y);
});
}
结果: