Spring Data Elasticsearch 使用示例

后端使用Spring Data Elasticsearch的代码示例 本文旨在为Java开发者提供全面的Spring Data Elasticsearch实践指南,覆盖从基础配置到高级查询的所有关键环节。我们将重点关注实际开发中最常用的功能场景,同时也会探讨性能优化和异常处理等进阶主题。文章将从基础概念开始,逐步深入到实际代码实现。我们将首先介绍核心架构,然后详细讲解各种查询方法,最后通过完整项目案例展示实际应用。每个部分都包含可运行的代码示例和最佳实践建议。文档(Document):Elasticsearch中的基本数据单元,类似JSON对象索引(Index) 阅读详情

简介

在以前的文章中,介绍过如果使用Elasticsearch提供的RestHighClient之类的操作Elasticsearch,本篇将介绍如何使用Spring封装好的Elasticsearch

Maven 依赖

Spring Data Elasticsearch的依赖如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Elasticsearch的model

使用Elasticsearch时,类型Mybatis,我们也需要定义数据模型,让其能对应上Elasticsearch中的数据结构

定义大致如下:

package com.ninetech.cloud.opeate.warn.server.elastic.model;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.gson.annotations.SerializedName;
import lombok.Builder;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.util.Date;

@Data
@Builder
@Document(indexName = "test-index")
public class TestModel {

    @Id
    @Field(type = FieldType.Text)
    private String id;

    @Field(type = FieldType.Text)
    private String name;
}

如上所示,我们简单定义了一个,其中的@Id是Elasticsearch文档的唯一标识,如果在保存的时候不填入,则会自动生成

@Field是字段类型,有很多的类型,这方面请参考文档,自行搜索查看

Repository

同MySQL和MongoDB,我们也需要定义的一个Repository层

public interface TestRepository extends ElasticsearchRepository<TestModel, String> {

    List<TestModel> findByName(final String name);
}

如上所示,和Mybatis Plus很像,这里也继承了一个基础的ElasticsearchRepository,其中内置很多的基础常用方法

我们还自定义了一个根据Name查看的方法,这里可以看到MongoDB和Elasticsearch这两个非关系数据的使用上还是挺像的

Service

数据模型和Repository都准备好了,下面我们来看看如何使用

我们就简单的进行下保存操作和查询操作

@Slf4j
@Service
@AllArgsConstructor
public class TestService {

    private final TestRepository testRepository;

    public void save( final String name) {
        final TestModel log = TestModel.builder()
                .name(name)
                .build();
        testRepository.save(log);
    }

    public List<TestModel> list(final String name) {
	return testRepository.findByName(name);
    }
}

如上所示,使用起来还是挺方便的

总结

本篇介绍了在Spring Data中Elasticsearch的基本使用,可以看出来和MongoDB差不多,同样也是使用上比较方便

但如果面对复杂查询话,目前使用下来还是有点吃力(也有可能是不够熟系)

参考链接

ES在SpringBoot集成使用 按i进入插入模式,就可以编辑了,编辑完按ESC退出编辑模式,输入:,进入底行模式,再输入wq强制保存并退出,这些命令不懂的话去学下liunx基础。可以进行索引的创建、文档的增删改查等操作。Kibana是ES的一个图形化操作工具,也可以使用es-head,这里我本人使用的是es-head,因此我讲的也是es-head安装。其中的高亮显示是在ES7.9.x版本才有的好像,我在ES7.7版本显示报错,有一个方法不支持了。- http://localhost:9200 //es容器的地址,ip要换成虚拟机ip。 阅读详情

相关推荐

后端领域Spring Data Elasticsearch的错误处理

在现代后端开发中,Elasticsearch作为流行的搜索和分析引擎被广泛使用。Spring Data Elasticsearch作为Spring生态系统的一部分,为开发者提供了便捷的Elasticsearch集成方式。然而,在实际生产环境中,网络波动、集群故障、查询超时等问题时有发生,如何正确处理这些异常情况成为保证系统可靠性的关键。本文旨在全面剖析Spring Data Elasticsearch的错误处理机制,涵盖从基础异常捕获到高级重试策略的全套解决方案。

架构师的AI之路,分享AI应用开发架构的学习与实践。 1168

Spring Data Elasticsearch--ElasticsearchRestTemplate--使用/教程/实例

本文用实例来介绍如何使用Spring Data Elasticsearch的ElasticsearchRestTemplate来操作ES。包括:索引的增删等、文档的增删改查、文档的动态查询(或者说:多条件查询、复杂查询)。 动态查询的含义:查询条件有多个时,某个查询条件可能有也可能没有,这时就需要手动判断,如果为空则不拼装搜索条件。 本文用博客的业务进行示例。索引名:blog,里边有标题、内容、作者、创建时间等。

IT利刃出鞘的博客 2万+

常见js手撕题及算法总结

设计一个lazyMan,实现以下功能: LazyMan(‘Tony’); // Hi I am Tony LazyMan(‘Tony’).sleep(10).eat(‘lunch’); // Hi I am Tony // 等待了10秒… // I am eating lunch LazyMan(‘Tony’).eat(‘lunch’).sleep(10).eat(‘dinner’); // H...

没有名字适合我的博客 3176

记一个spring-data-elasticsearch使用的坑

之前多线程插入es的时候发现效率很低,而且线程越多效率下降的非常快,且不符合es的性能需求,遂查之 刚开始没想太多,只是进行优化,根据官方文档 比如横向扩展,调整refresh_interval之类的,基本能做的都做了,但是发现提升的不多,而且cpu一直占用很高 之后发现一个奇怪的现象,...

chenlunhuang5289的博客 1926

suse ha for sap scale-up性能优化场景安装配置

suse ha for SAP安装配置

jetliu05的博客 2134

VM与欧姆龙PLC通讯设置实战:Fins TCP/UDP协议详解

本文详细解析了VM(VisionMaster)与欧姆龙PLC通过Fins TCP/UDP协议进行通讯的实战设置。内容涵盖网络配置、协议选择(TCP可靠性与UDP实时性)、VM端地址映射与数据点添加、以及数据接收解析流程,并提供了常见错误排查与高级调试技巧,帮助视觉与自动化工程师快速实现稳定可靠的工业通讯集成。

weixin_29172963的博客 327

Spring Data Elasticsearch--使用/教程/实例

原文网址: 简介

IT利刃出鞘的博客 1万+

RuoYi(分离版) 使用代码生成器添加子模块(idea版)

文章目录准备一、使用代码生成器1.数据库2.导入表并生成代码二、导入代码文件1.新建一个模块2.导入zip代码文件3.模块环境配置添加菜单和访问地址总结 准备 前提要把系统启动起来,部分教程可以参考这边文章若依框架RuoYi前后端分离项目导入IDEA及运行启动 但是完全参考这篇文章还是不能把项目启动起来,因为这篇文章没有说明数据库。 我是用的是本地数据库,采用xampp+Navicat的组合来部署和访问数据库。打开Navicat,连接并创建数据库ry-vue并导入数据脚本ry_20191008.sql,q

dream_coke的博客 1万+

Spring Data Elasticsearch

接口的继承所有方法@Api(tags = "增删改查(文档)")@Autowired@ApiOperation("添加单个文档")blog.setTitle("Spring Data ElasticSearch学习教程" + id);blog.setContent("这是添加单个文档的实例" + id);@ApiOperation("添加多个文档")i

qq_64376339的博客 2540

FOC 电流采样方案对比(单电阻/双电阻/三电阻)

电流采样的作用 在FOC算法中,电流采样在反馈环节是相当重要的一部分,通常交流三相同步电机在进行坐标变换的时候,需要实时测量相电流,最终通过SVPWM实现电机转子磁场和定子磁场的同步转动,那么这里有三种方案,单电阻采样,双电阻采样,三电阻采样。本文参考ST的单电阻和三电阻采样以及TI的双电阻采样,结合实际中可能需要注意的地方进行总结分析。 单电阻采样 双电阻采样 三电阻采样 ...

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 4万+

定位分析RCU stall问题

在编译内核时打开或者在启动参数中增加这样统计信息是在采样周期中收集的。其中number行分别是发生stalled的cpu上的硬中断,软中断,和上下文的切换次数cputime行的前三列分别是硬中断,软中断和任务消耗的cpu时间,单位为ms.最后一个数字是统计的周期时间(ms).因为用户态的任务通常不会引起RCU CPU stalls,所以任务通常是内核任务,这也是为什么只统计system cpu的原因.

happyAnger6的专栏 1993

Spring Data ElasticSearch示例--使用NativeSearchQuery查询

学亮编程手记 4592

C#的GDI+绘图详解

/消除锯齿 或 AntiAlias。// 1.在窗体或控件的Paint事件中,用PaintEventArgs e 创建绘图对象 ---- 控件或窗体重绘时。//为控件创建绘图对象。//--------------------以上方法三选一。//2.创建绘图对象 panel1中绘图。

weixin_50920631的博客 3457

Spring 整合 Elasticsearch

Spring 项目中专门有链接ES的,可以方便快速的链接ES。官方文档一般都会有版本对照的说明同时也提供了更为方便的“Spring Boot Starter Data Elasticsearch”。在这里我们使用的是“Spring Boot Starter Data Elasticsearch » 2.6.15” 这里要注意结合自己项目版本选择正确的“Spring Boot Starter Data Elasticsearch“版本引入到项目即可</</</</

GrayGo的博客 2058

利用Dify构建文档内容的分析对比

本次主要做了一些workflow和Agent的应用实现,供大家参考。主要目的是为了进行两个内部报告文件的内容对比,特别是报告中的各类审批表、申请表、推荐表和流程对比,本地数据通过知识库方式分别加载到两个知识库中,编制工作流针对同一个问题进行知识库检索,之后将查询结果进行合并,再一起提交给LLM进行对比,最终将对比分析结果以markdown方式返回显示。主要包括如何构建知识库,如何设计workflow、如何将工作流发布为工具、如何设计提示词、如何在agent中引入前面发布的工具,最终通过agent实现与用户交

hhue2007的专栏 2522

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java连接ElasticSearch(springboot2.X配置ES连接的方式)

springboot2.X配置ES连接的3种方式 Java连接ElasticSearch Java连接ElasticSearch的2种方式 有两种方式: 一种 是9200端口(RestClient)rest 接口,基于http协议; 另一种是用 节点的9300端口(TransportClient),基于Tcp协议;(不推荐使用,理由如下) es7.X 版本的改变 简单点说就是 TransportC...

weixin_35720385的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

spring-es-data关键概念总结

文中所写的spring-data-elasticsearch版本为5.1.1。

baidugreat的专栏 393

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

elasticsearch–与spring_data整合

elasticsearch–与spring_data整合 文章目录elasticsearch--与spring_data整合一、简介二、步骤2.1 添加关键maven依赖2.2 spring配置文件spring-es.xml2.3 定义bean类Stu.java2.4 定义repository类StuEsRepository.java2.5 示例 一、简介 这里将介绍elasticsearch在s...

panda-star的博客 319

Java封装原生ES

文章目录🌞 Sun Frame:SpringBoot 的轻量级开发框架(个人开源项目推荐)🌟 亮点功能📦 spring cloud模块概览常用工具🔗 更多信息1.spring-data-es操作ES1.引入依赖2.application.yml配置uris3.SubjectInfoEs.java 创建ES实体类(指定映射和索引)4.SubjectEsRepository.java 依赖注入一个接口(对应于实体类)5.SubjectEsService.java6.SubjectEsServiceImpl.ja

Sun的个人博客 1090

使用ElasticSearch快速搭建数据搜索服务

使用ElasticSearch快速搭建数据搜索服务 闲情偶侃 | 2016-12-07 10:45 使用ElasticSearch快速搭建数据搜索服务 1. ElasticSearch? ElasticSearch 是最近几年Java界少有的当红炸子鸡,在Github上有19663个STAR。ES这两年在各个领域都有极大的发展,目前看来基本上是无所不能,我想是因为它的工作是数据的存储和

jklfjsdj79hiofo的专栏 1200

第 4-8 课:Spring Boot 集成 ElasticSearch

ElasticSearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库——无论是开源还是私有。 ElasticSearch 使用 Java 编写的,它的内部使用的是 Lucene 做索引与搜索,它的目的是使全文检索变得简单,通过隐藏 Lucene 的复杂性,取而代之提供了一套简单一致的 R...

John_chu的博客 266

spring-data-elasticsearch suggest实现错词纠正和自动补全

背景: 项目中使用了spring-data-elasticsearch注解式mapping的配置了对象实现了搜索功能。 接到需求需要实现错词纠正功能和自动补全功能: 在网上找的资料,可以通过ES的suggest功能实现,但大部分是直接使用elasticsearch client的方式实现的,于是对使用spring-data-elasticsearch实现的步骤做个总结,希望对有需要的同学有所帮助。 这边直接进行配置说明,不再介绍ES通过注解配置mapping和Suggest的基础知识点。 注意:这里只实现

qvc180的博客 3287

Spring Data Solr 使用

搜索引擎:Elasticsearch、Solr、Lucene ELK中的ES:Elasticsearch SolrCloud 的搭建、使用 Solr 高亮显示 Spring Data Solr 使用 Solr的安装与配置 Solr 原理、API 使用 Lucene 原理、API使用 Lucene 得分算法 Spring Data Solr就是为了方便Solr的开发所研制的一个框架,...

あずにゃん梓喵的博客 1163

SpringBoot中使用Elasticsearch入门教程(上)

Spring Data全家桶中对Elasticsearch也做了集成,本会基于最新的Spring Data Elasticsearch 4.0介绍在spring中对ES的基本使用。

Doit_kang的博客 2317
上一篇: Spring Data MongoDB 使用示例
下一篇: Java 邮件发送
_萧_
博客等级 码龄10年 55粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值