SpringBoot3.x下如何使用es进行数据查询

文章目录

概要

SpringBoot3中的elasticsearch版本已经来到8.x版本,相比较于SpringBoot2中的7.x版本相关写法已经发生改变。在SpringBoot2中会使用ElasticsearchRestTemplate和es进行交互,但这个类在SpringBoot3中已经被移除,需要使用ElasticsearchTemplate或者ElasticsearchClient和es进行交互。下面介绍这两个类的基本使用方式。

ElasticsearchTemplate

java 复制代码
    @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查询语句等价于

json 复制代码
{
    "query": {
        "bool": {
            "filter": [
                {
                    "term": {
                        "Name": {
                            "value": "test"
                        }
                    }
                }
            ]
        }
    },
    "from": 0,
    "size": 100,
    "sort": [
        {
            "Name": {
                "order": "desc"
            }
        }
    ]
}

ElasticsearchClient

java 复制代码
    @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.依赖引入

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2.ElasticsearchTemplate和ElasticsearchClient已经自动装配,业务类中直接注入即可。

3.User类

java 复制代码
    /**
     * 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;
    }
相关推荐
Elastic 中国社区官方博客2 天前
Elasticsearch:运用 JINA 来实现多模态搜索的 RAG
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·jina
lifewange2 天前
Git版本管理
大数据·git·elasticsearch
ACGkaka_2 天前
SpringBoot 实战(四十一):集成 Elasticsearch
spring boot·elasticsearch·jenkins
Devin~Y2 天前
大厂 Java 面试实战:从电商微服务到 AI 智能客服(含 Spring 全家桶、Redis、Kafka、RAG/Agent 解析)
java·spring boot·redis·elasticsearch·spring cloud·docker·kafka
Elastic 中国社区官方博客2 天前
Elasticsearch:语义搜索,现在默认支持多语言
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
慕诗客2 天前
repo管理多仓库
大数据·elasticsearch·搜索引擎
Elasticsearch2 天前
Elasticsearch:运用 JINA 来实现多模态搜索的 RAG
elasticsearch
Rabbit_QL3 天前
【Git基础】03——Git 撤销与回退:改错了怎么办
大数据·git·elasticsearch
Elastic 中国社区官方博客3 天前
将 Logstash 管道从 Azure Event Hubs 迁移到 Kafka 输入插件
大数据·数据库·elasticsearch·microsoft·搜索引擎·kafka·azure
程序员 沐阳3 天前
Git 二分法精准定位 Bug:从原理到实战,让调试效率起飞
git·elasticsearch·bug