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;
    }
相关推荐
爱莉希雅&&&3 小时前
elasticsearch+kibana+logstash+filebeat链路部署流程
大数据·elasticsearch·搜索引擎·kibana·logstash·filebeat
前端 贾公子4 小时前
Git Worktree 使用指南
大数据·elasticsearch·搜索引擎
Elasticsearch5 小时前
如何使用 OpenTelemetry 对你的搜索 API 进行埋点,并使用 ES|QL 对其进行查询
elasticsearch
阿里云大数据AI技术18 小时前
更快、更稳、更省:揭秘阿里云 Elasticsearch 存算分离与弹性扩缩
elasticsearch
阿里云大数据AI技术19 小时前
Search Lake:ES x Paimon 让湖上多模态数据可搜可用
人工智能·elasticsearch·搜索引擎
Elasticsearch1 天前
Elastic 如何利用磁盘支持的追踪存储将 OpenTelemetry 尾部采样内存占用降低 65%
elasticsearch
.柒宇.1 天前
ELK日志分析系统实战指南:Elasticsearch搭建与入门(8.18.8版本)
运维·elk·elasticsearch·logback·日志系统
Linux-18742 天前
分布式链路追踪系统之二进制安装skywalking
elasticsearch·云原生·skywalking·分布式链路追踪系统·应用程序性能监控
阿里云大数据AI技术2 天前
阿里云 Elasticsearch 日志采集与加工服务:让日志链路少一串组件,多一份稳定
人工智能·elasticsearch
heimeiyingwang2 天前
【架构实战】可观测性三支柱:日志、指标、链路的融合
elasticsearch·架构·kubernetes