Spring Boot整合ElasticSearch实战 - 第511篇

历史文章(文章累计500+)

《国内最全的Spring Boot系列之一》

《国内最全的Spring Boot系列之二》

《国内最全的Spring Boot系列之三》

《国内最全的Spring Boot系列之四》

《国内最全的Spring Boot系列之五》

《国内最全的Spring Boot系列之六》

《国内最全的Spring Boot系列之七》

日赚800,利用淘宝/闲鱼进行AI音乐售卖实操 - 第506篇

如何让AI生成自己喜欢的歌曲-AI音乐创作的正确方式 - 第507篇

ES全文检索[ES系列] - 第508篇

ES 深度分页问题及针对不同需求下的解决方案[ES系列] - 第509篇

抖音主播/电商人员有福了,利用Suno创作产品宣传,让产品动起来-小米Su7 - 第510篇

最近体验了下AI生成音乐,感觉效果很不错,有兴趣的可以访问如下地址体验一下:

https://suno3.cn/#/?i=8NCBS8_WXTT

Hi,大家好,我是悟纤。我就是我,不一样的烟火。我就是我,与众不同的小苹果。

这一节来看下在SpringBoot中如何集成ElasticSearch。

一、Spring Boot整合ElasticSearch

这里有一个版本的对应情况,最好对应上会比较好,不然会出现莫名其妙的问题。

https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#new-features.5-1-0

​1.1 创建项目

根据相应的版本,选择相应的Spring Boot版本,这里选择的是3.1.4版本。

1.2 添加依赖

在pom.xml文件添加依赖:

<dependencies>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>    </dependency>    <dependency>        <groupId>org.projectlombok</groupId>        <artifactId>lombok</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-test</artifactId>        <scope>test</scope>    </dependency></dependencies>

1.3 添加配置

在配置文件application.properties中添加配置:

spring.elasticsearch.uris = http://localhost:9200spring.elasticsearch.connection-timeout = 3s

1.4 创建实体

创建实体,使用@Field注解,添加字段在ES中的类型以及使用的分词器:

@Data@AllArgsConstructor@Document(indexName = "employees")public class Employee {    @Id    private Long id;    @Field(type= FieldType.Keyword)    private String name;    private int sex;    private int age;    @Field(type= FieldType.Text,analyzer="ik_max_word")    private String address;    private String remark;}

1.5实现ElasticsearchRepository

该接口是框架封装的用于操作Elastsearch的高级接口:

@Repositorypublic interface EmployeeRepository extends ElasticsearchRepository<Employee, Long> {    List<Employee> findByName(String name);}

1.6测试

@AutowiredEmployeeRepository employeeRepository;@Testvoid test() {    Employee employee = new Employee(1L,"悟纤",1,32,"福建福州","love coding");    //插入文档    employeeRepository.save(employee);    //根据id查询    Optional<Employee> result = employeeRepository.findById(1L);    System.out.println(String.valueOf(result.get()));    //根据name查询    List<Employee> list = employeeRepository.findByName("悟纤");    System.out.println(list.get(0));}

1.7使用ElasticsearchTemplate

@Resourceprivate ElasticsearchTemplate elasticsearchTemplate;@Testpublic void testCreateIndex(){    //创建索引    IndexOperations indexOperations = elasticsearchTemplate.indexOps(IndexCoordinates.of("employee_index"));    if (indexOperations.exists()) {        System.out.println("索引已经存在");    }else {        //创建索引        indexOperations.create();    }}@Testpublic void testDeleteIndex(){    //删除索引    IndexOperations indexOperations = elasticsearchTemplate.indexOps(IndexCoordinates.of("employee_index"));    indexOperations.delete();}@Testpublic void testQueryDocument(){    NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();    //查询    //builder.withQuery(QueryBuilders.matchQuery("address","公园"));    // 设置分页信息    builder.withPageable(PageRequest.of(0, 5));    // 设置排序    //builder.withSort(SortBuilders.fieldSort("age").order(SortOrder.DESC));    SearchHits<Employee> search = elasticsearchTemplate.search(builder.build(), Employee.class);    List<SearchHit<Employee>> searchHits = search.getSearchHits();    for (SearchHit hit: searchHits){        System.out.println("返回结果:"+hit.toString());    }}@Testpublic void testInsertBatch() throws JsonProcessingException {    List<Employee> employees = new ArrayList<>();    employees.add(new Employee(2l,"张三",1,25,"广州天河公园","java developer"));    employees.add(new Employee(3l,"李四",1,28,"广州荔湾大厦","java assistant"));    employees.add(new Employee(4l,"小红",0,26,"广州白云山公园","php developer"));    List<IndexQuery> queries = new ArrayList<>();    for (Employee employee : employees) {        IndexQuery indexQuery = new IndexQuery();        indexQuery.setId(employee.getId().toString());        ObjectMapper mapper = new ObjectMapper();        String json = mapper.writeValueAsString(employee);        indexQuery.setSource(json);        queries.add(indexQuery);    }    //bulk批量插入    elasticsearchTemplate.bulkIndex(queries,Employee.class);}

基本的集成用起来害死很简单的,关键在如何在实际的项目中进行合理的使用,这个是需要在具体的实战中进行自我摸索和探究的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/11440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

呼叫中心系统选pscc好还是okcc好

选择PSCC&#xff08;商业软件呼叫中心&#xff09;还是OKCC&#xff08;开源呼叫中心&#xff09;&#xff0c;应基于以下几个关键因素来决定&#xff1a; 技术能力&#xff1a;如果企业拥有或愿意投入资源培养内部技术团队&#xff0c;开源解决方案可能更合适&#xff0c;因为…

Spring+Mybatis-plus 实现 Gauss DB数据库代码生成

需求&#xff1a; 使用的gauss db数据库&#xff08;类似oracle语法&#xff09;&#xff0c;需要根据指定表生成entity、dao等代码 1&#xff0c;引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.or…

http代理ip按流量划算还是个数划算?

随着科技的进步和互联网的发展&#xff0c;越来越多的企业在业务上都需要用到代理&#xff0c;那么http代理ip按流量划算还是个数划算&#xff1f;小编接下来就跟大家介绍一下&#xff1a; 首先我们得先了解http代理ip的按流量模式和个数模式分别是什么&#xff1a; 一、按流…

软件设计中的数字:7

“ 使软件更易理解的秘密&#xff1a;米勒法则” 小游戏 学习之前先一起玩一个小游戏。 3秒钟时间&#xff0c;看看下面的图片中有多少个小块&#xff1f; 3秒到了&#xff0c;数出来了吗&#xff1f;22个。 没数出来也没关系&#xff0c;我也没数出来o(╥﹏╥)o 现在&…

WEB前端复习——JS

JS是运行在客户端的脚本&#xff08;script&#xff09;语言 引入JS进html ①sript标签内编写 <script type"text/javascript">document.write("<h1>hi</h1>")window.alert("who") </script> ②外部JS script src【…

生产环境节点扩容方案

datanode节点扩缩容(1人天) 注意:新增节点需要走商务,节点扩容需要申请新的license 制品包下载 #内网下载(环境检查脚本) wget --user=admin --password=Y!bC2hx0TN@21cal http://10.69.71.180:8082/artifactory/product/qiudongyang/precheck/os-check20221127.tar…

牛客热题:比较版本号

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;比较版本号题目链接方法一:暴力…

Elasticsearch做到像mysql这样的表连接Parent-Child实现

比如在mysql中我有两张表&#xff0c;movies和ratings&#xff0c;这两张表依赖movie_id实现关联。 那么我需要在elasticsearch中实现一下两个任务 电影标题为When Will I Be Loved的电影评分的均值是多少电影评分大于5的电影标题是什么 可以看出来这两个问题都需要将movies和…

服务调用中的异常处理方案

背景 在微服务架构中,A服务调用B服务,当B服务中抛出异常时,我们的意愿是能够获取到所有的异常信息,并且可以触发服务的熔断降级。 但由于全局异常处理机制的存在,会帮我们处理B服务中抛出的异常,并把HTTP的状态码设置为200,那么此时对A服务来说,对B服务抛出的异常是无…

在线抠图网站

https://pixian.ai/ 这个网站提供一键去除图像背景的智能抠图服务。 水印去除剂 - 删除照片中的任何水印 该网站是一个智能抠图工具&#xff0c;可以帮助用户去除照片中的水印。 HAMA | AI Object remover, Image Eraser 这是一个智能抠图AI工具的网站&#xff0c;可以帮助…

电商平台接口自动化框架实践||电商API数据采集接口

电商数据采集接口 语言&#xff1a;python 接口自动化实现流程 红色为可实现/尚未完成 绿色为需要人工干预部分 自动生成测试用例模板&#xff08;俩种方式二选一&#xff09;&#xff1a; mimproxy&#xff0c;通过浏览器代理抓包方式&#xff0c;访问 H5 或者 web 页面&a…

processing完整教程

概述&#xff1a;processing在我眼里就是libgdx的高度封装&#xff0c;如果各位会libgdx&#xff0c;学processing应该可以说是无师自通&#xff0c;当然processing是java语言那边的。 processing是什么&#xff1f; 官网是这样解释的&#xff1a;Processing 是一本灵活的软件…

PTA 6-2 入侵者围剿第二关2情报解密

经过上一步&#xff0c;已经创建了2个分队的情报信息链&#xff0c;现在需要将2个分队的情报进行合并&#xff0c;并删除重复值&#xff0c;合并后的情报信息确保唯一性。 假定上一步输入的情报信息是有序的&#xff0c;现在是合并2个有序链表。 函数接口定义&#xff1a; 第…

每周一算法:无向图的最小环

题目链接 观光之旅 题目描述 给定一张无向图&#xff0c;求图中一个至少包含 3 3 3 个点的环&#xff0c;环上的节点不重复&#xff0c;并且环上的边的长度之和最小。 该问题称为无向图的最小环问题。 你需要输出最小环的方案&#xff0c;若最小环不唯一&#xff0c;输出…

core.sshd.xxxxxx文件过大

背景 【紧急】【应用分组】应用: 接入点服务, 分组: 观众预发, ip: xx.xx.xx.xx 【/】&#xff0c;磁盘使用率已连续2次大于90% [当前值:100%]。报警时间: 2024-05-13 14:07:01 原因 登录机器查看&#xff0c;发现根目录下有大量的崩溃文件将 / 打满 处理 1&#xff0c; 删…

C#链接数据库、操作sql、选择串口

// 公共增删方法 using MySql.Data.MySqlClient; using System.Data; namespace ****** {public class MySQLHelper{private MySqlConnection conn null;private MySqlCommand comm null;private MySqlDataReader reader null;/// <summary>/// 构造方法里建议连…

【图解计算机网络】TCP 重传、滑动窗口、流量控制、拥塞控制

TCP 重传、滑动窗口、流量控制、拥塞控制 TCP 重传超时重传快速重传 滑动窗口流量控制拥塞控制慢启动拥塞避免拥塞发生快速恢复 TCP 重传 TCP重传是当发送的报文发生丢失的时候&#xff0c;重新发送丢失报文的一种机制&#xff0c;它是保证TCP协议可靠性的一种机制。 TCP重传…

二级Java第五套真题(乱序版)含真题解析

一. 单选题(共39题,39分) 1. (单选题, 1分) 阅读下列代码 public class Test implements Runnable { public void run (Thread t) { System.out.println("Running."); } public static void main (String[ ] args) { T…

mysql 离线安装

package download mysql https://dev.mysql.com/downloads/mysql/ libaio http://mirror.centos.org/centos/7/os/x86_64/Packages/libaio-0.3.109-13.el7.x86_64.rpm 根据自己服务器选择下载对应的安装包及依赖 删除本机自带mysql相关 # 首先排查服务器自身是否有安装对应m…

威胁建模的艺术:了解网络安全风险的另一面

网络安全的本质是攻防双方的对抗与博弈。然而&#xff0c;由于多种攻防之间的不对称性因素存在&#xff0c;使得攻击者总能在对抗过程中抢占先机。为了更好地了解潜在的威胁和缺陷&#xff0c;实现主动式防御&#xff0c;企业需要重新考虑他们的网络防护方法&#xff0c;而威胁…