SpringBoot3.x使用es进行数据查询的方式
概要
SpringBoot3中的elasticsearch版本已经来到8.x版本,相比较于SpringBoot2中的7.x版本相关写法已经发生改变。在SpringBoot2中会使用ElasticsearchRestTemplate和es进行交互,但这个类在SpringBoot3中已经被移除,需要使用ElasticsearchTemplate或者ElasticsearchClient和es进行交互。下面介绍这两个类的基本使用方式。
ElasticsearchTemplate
@Test
void test_1() {
NativeQuery query = new NativeQueryBuilder()
.withPageable(Pageable.ofSize(100))
//使用lambda表达式使其更符合es语句的写法
.withQuery(q -> q
.bool(b -> b
.filter(f -> f
.term(t -> t
.field("Name")
.value("test")))))
.withSort(s -> s
.field(f -> f
.field("Name")
.order(SortOrder.Desc)))
.build();
SearchHits<User> search = elasticsearchTemplate.search(query, User.class, IndexCoordinates.of("test-topic"));
List<SearchHit<User>> searchHits = search.getSearchHits();
for (SearchHit<User> searchHit : searchHits) {
System.out.println(searchHit.getContent().getName());
}
}以上的es查询语句等价于
{
"query": {
"bool": {
"filter": [
{
"term": {
"Name": {
"value": "test"
}
}
}
]
}
},
"from": 0,
"size": 100,
"sort": [
{
"Name": {
"order": "desc"
}
}
]
}
ElasticsearchClient
@Test
void test_2() throws IOException {
Function<SearchRequest.Builder, ObjectBuilder<SearchRequest>> query = fn-> fn
.index("test-topic")
.size(100)
//使用lambda表达式使其更符合es语句的写法
.query(q -> q
.bool(b -> b
.filter(f -> f
.term(t -> t
.field("Name")
.value("test")))))
.sort(s -> s
.field(f -> f
.field("Name")
.order(SortOrder.Desc)));
SearchResponse<User> search = elasticsearchClient.search(query, User.class);
List<Hit<User>> hits = search.hits().hits();
for (Hit<User> hit : hits) {
System.out.println(hit.source().getName());
}
}小结
1.依赖引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>2.ElasticsearchTemplate和ElasticsearchClient已经自动装配,业务类中直接注入即可。
3.User类
/**
* test_1:使用第一种测试时,实体属性和es字段属性不对应时需要使用@Field(org.springframework.data.elasticsearch.annotations.Field)注解标识
* test_2:使用第二种测试时,实体属性和es字段属性不对应时需要使用@JsonProperty(com.fasterxml.jackson.annotation.JsonProperty)注解标识
*/
@Data
public class User {
@Id
private String id;
@Field("Name")
@JsonProperty("Name")
private String name;
}到此这篇关于SpringBoot3.x使用es进行数据查询的方式的文章就介绍到这了,更多相关springboot使用es数据查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot熔断机制之CircuitBreaker详解
这篇文章主要介绍了SpringBoot熔断机制之CircuitBreaker详解,SpringBoot的熔断机制在微服务架构中扮演着重要角色,其中CircuitBreaker是其核心机制之一,用于防止服务的异常状态影响到整个系统的运作,需要的朋友可以参考下2023-10-10
MybatisPlus 多租户架构(Multi-tenancy)实现详解
这篇文章主要介绍了MybatisPlus 多租户架构(Multi-tenancy)实现详解,详细的介绍了什么是多租户架构以及使用MybatisPlus实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-11-11
深扒Java中POJO、VO、DO、DTO、PO、BO、AO、DAO的概念和区别以及如何应用
po vo bo dto dao 和 pojo 是软件开发中经常使用的一些概念,用于设计和实现对象模型,下面将分别解释这些概念的含义及其在开发中的应用,这篇文章主要给大家介绍了关于Java中POJO、VO、DO、DTO、PO、BO、AO、DAO的概念和区别以及如何应用的相关资料,需要的朋友可以参考下2024-08-08
java判断两个List<String>集合是否存在交集三种方法
这篇文章主要介绍了三种判断Java中两个List集合是否存在交集的方法,分别是使用retainAll方法、使用Stream和anyMatch以及使用Set提高性能,每种方法都有其适用场景和优缺点,需要的朋友可以参考下2025-03-03


最新评论