SpringBoot整合ES
1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.6.3</version>
</dependency>
2.config配置文件
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {@Override@Beanpublic RestHighLevelClient elasticsearchClient() {final ClientConfiguration clientConfiguration =ClientConfiguration.builder().connectedTo("xx.xxx.xxx.xx:9200") //地址.build();return RestClients.create(clientConfiguration).rest();}
}
会返回两个客户端对象,分别是ElasticsearchOperations和RestHighLevelClient(更推荐使用)。前者是通过面向对象的形式来操作的,后者是通过客户端的方式操作的。
3.索引相关操作
/*索引相关操作*/
public class Test1 {RestHighLevelClient restHighLevelClient;@Beforepublic void init(){final ClientConfiguration clientConfiguration =ClientConfiguration.builder().connectedTo("xx.xxxx.xxx.xx:xxxx").build();this.restHighLevelClient = RestClients.create(clientConfiguration).rest();}@Test//创建索引public void createIndex() throws IOException {CreateIndexRequest createIndexRequest = new CreateIndexRequest("products");//指定映射 参数1:指定映射json结构 参数2:指定数据类型createIndexRequest.mapping("{\n" +" \"properties\": {\n" +" \"id\":{\n" +" \"type\":\"integer\"\n" +" },\n" +" \"title\":{\n" +" \"type\":\"keyword\"\n" +" },\n" +" \"price\":{\n" +" \"type\":\"double\"\n" +" },\n" +" \"created_at\":{\n" +" \"type\":\"date\"\n" +" },\n" +" \"description\":{\n" +" \"type\":\"text\",\n" +" \"analyzer\": \"ik_max_word\"\n" +" }\n" +" }\n" +" }", XContentType.JSON);//参数1:创建索引请求对象 参数2:请求配置对象CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);System.out.println("创建状态:"+createIndexResponse.isAcknowledged()); //打印返回信息restHighLevelClient.close(); //关闭资源}@Test//删除索引public void deleteIndex() throws IOException {AcknowledgedResponse acknowledgedResponse = restHighLevelClient.indices().delete(new DeleteIndexRequest("products"), RequestOptions.DEFAULT);System.out.println("删除状态:"+acknowledgedResponse.isAcknowledged()); //打印返回信息restHighLevelClient.close(); //关闭资源}
}
4.文档相关操作
/*文档相关操作(document)*/
public class Test2 {RestHighLevelClient restHighLevelClient;@Beforepublic void init(){final ClientConfiguration clientConfiguration =ClientConfiguration.builder().connectedTo("xx.xxx.xxx.xx:9200").build();this.restHighLevelClient = RestClients.create(clientConfiguration).rest();}@Test //创建文档public void createDoc() throws IOException {IndexRequest indexRequest = new IndexRequest("products");indexRequest.id("2") //手动指定文档的id,如果不指定则会用uuid.source("{\n" +" \"title\":\"瑞星咖啡\",\n" +" \"price\": 9.8,\n" +" \"created_at\":\"2023-11-18\",\n" +" \"description\":\"瑞星咖啡我最爱了,好喝\"\n" +"}", XContentType.JSON);//参数1:索引请求对象,参数2:请求配置对象IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);System.out.println(indexResponse.status());restHighLevelClient.close();}@Test //修改文档public void updateDoc() throws IOException {UpdateRequest updateRequest = new UpdateRequest("products","1");updateRequest.doc("{\n" +" \"title\":\"库迪咖啡非\"\n" +" }",XContentType.JSON);//参数1:索引请求对象,参数2:请求配置对象UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);System.out.println(updateResponse.status());restHighLevelClient.close();}@Test //删除文档public void deleteDoc() throws IOException {DeleteRequest deleteRequest = new DeleteRequest("products","2");//参数1:索引请求对象,参数2:请求配置对象DeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);System.out.println(deleteResponse.status());restHighLevelClient.close();}@Test //基于id查询文档public void searchDocById() throws IOException {GetRequest getRequest = new GetRequest("products", "1");GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);System.out.println(getResponse.getId());System.out.println(getResponse.getSourceAsString());}}
5.高级查询
public class Test3 {RestHighLevelClient restHighLevelClient;@Beforepublic void init(){final ClientConfiguration clientConfiguration =ClientConfiguration.builder().connectedTo("xx.xxx.xxx.xx:9200").build();this.restHighLevelClient = RestClients.create(clientConfiguration).rest();}@Test //查询一个索引中的所有文档public void searchAll() throws IOException {SearchRequest searchRequest = new SearchRequest("products");searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));//查询所有//参数1:搜索请求对象 参数2:请求配置对象SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("查询出来的总条数:"+searchResponse.getHits().getTotalHits().value);System.out.println("查询出来的最大得分"+searchResponse.getHits().getMaxScore());//拿到数据结果SearchHit[] hits = searchResponse.getHits().getHits();for(SearchHit hit:hits){String id = hit.getId();System.out.println("id: "+id+" source: "+hit.getSourceAsString());}}@Test //基于关键词查询public void search() throws IOException {SearchRequest searchRequest = new SearchRequest("products");searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("description","好喝")));//查询所有//参数1:搜索请求对象 参数2:请求配置对象SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("查询出来的总条数:"+searchResponse.getHits().getTotalHits().value);System.out.println("查询出来的最大得分"+searchResponse.getHits().getMaxScore());//拿到数据结果SearchHit[] hits = searchResponse.getHits().getHits();for(SearchHit hit:hits){String id = hit.getId();System.out.println("id: "+id+" source: "+hit.getSourceAsString());}}/** 分页查询* 排序* 字段*/@Test //分页查询 与排序public void search2() throws IOException {SearchRequest searchRequest = new SearchRequest("products");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.matchAllQuery()).from(1) //起始位置 start=(page-1)*size.size(1) //每页显示条数.sort("price", SortOrder.ASC) //字段排序.fetchSource(new String[]{},new String[]{"created_at"}); //参数1:包含字段数组 参数2:排除字段数组searchRequest.source(searchSourceBuilder);//查询所有//参数1:搜索请求对象 参数2:请求配置对象SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("查询出来的总条数:"+searchResponse.getHits().getTotalHits().value);System.out.println("查询出来的最大得分"+searchResponse.getHits().getMaxScore());//拿到数据结果SearchHit[] hits = searchResponse.getHits().getHits();for(SearchHit hit:hits){String id = hit.getId();System.out.println("id: "+id+" source: "+hit.getSourceAsString());}}@Test //高亮public void search3() throws IOException {SearchRequest searchRequest = new SearchRequest("products");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();HighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.requireFieldMatch(false).field("description").field("title").preTags("<span style='color:red;'>").postTags("</span>");searchSourceBuilder.query(QueryBuilders.termQuery("description","好喝")).highlighter(highlightBuilder);searchRequest.source(searchSourceBuilder);//查询所有//参数1:搜索请求对象 参数2:请求配置对象SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("查询出来的总条数:"+searchResponse.getHits().getTotalHits().value);System.out.println("查询出来的最大得分"+searchResponse.getHits().getMaxScore());//拿到数据结果SearchHit[] hits = searchResponse.getHits().getHits();for(SearchHit hit:hits){System.out.println("id: "+hit.getId()+" source: "+hit.getSourceAsString());//获取高亮字段Map<String, HighlightField> highlightFields = hit.getHighlightFields();if(highlightFields.containsKey("description")){System.out.println("description高亮结果: "+highlightFields.get("description").fragments()[0]);}if(highlightFields.containsKey("title")){System.out.println("title高亮结果: "+highlightFields.get("title").fragments()[0]);}}}@Test //过滤查询public void search4() throws IOException {SearchRequest searchRequest = new SearchRequest("products");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.matchAllQuery()).postFilter(QueryBuilders.idsQuery().addIds("1")); //指定过滤条件searchRequest.source(searchSourceBuilder);//查询所有//参数1:搜索请求对象 参数2:请求配置对象SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("查询出来的总条数:"+searchResponse.getHits().getTotalHits().value);System.out.println("查询出来的最大得分"+searchResponse.getHits().getMaxScore());//拿到数据结果SearchHit[] hits = searchResponse.getHits().getHits();for(SearchHit hit:hits){String id = hit.getId();System.out.println("id: "+id+" source: "+hit.getSourceAsString());}}
}

相关文章:
SpringBoot整合ES
1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>2.6.3</version> </dependency> 2.config配置文件 Configu…...
Pandas实战100例 | 案例 10: 应用函数 - 使用 `apply`
案例 10: 应用函数 - 使用 apply 知识点讲解 Pandas 的 apply 函数是一个非常强大的工具,允许你对 DataFrame 中的行或列应用一个函数。这对于复杂的数据转换和计算非常有用。你可以使用 apply 来执行任意的函数,这些函数可以是自定义的,也…...
《C++大学教程》4.13汽油哩数
题目: 每位司机都关心自己车辆的行车里程数。有位司机通过记录每次出行所行驶的英里数和用油的加仑数来跟踪他多次出车的情况。请开发一个C程序,它使用一条while语句输入每次出车的行驶英里数和加油量。该程序应计算和显示每次出车所得到的每加仑行驶英里数&#x…...
OpenGL排坑指南—贴图纹理绑定和使用
一、前言 在OpenGL学习 的纹理这一章中讲述了纹理贴图的使用方式,主要步骤是先创建一个纹理的对象,和创建顶点VAO类似,然后就开始绑定这个纹理,最后在循环中使用,有时候可能还要用到激活纹理单元的函数。然而ÿ…...
Electron中 主进程(Main Process)与 渲染进程 (Renderer Process) 通信的方式
1. 渲染进程向主进程通信 修改 html 文件内容 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 解决控制…...
企业微信forMAC,如何左右翻动预览图片
1、control commandshifd 进入企业微信的debug调试模式 2、按照如下步骤选择 3、重启企业微信...
Android Firebase (FCM)推送接入
官方文档: 向后台应用发送测试消息 | Firebase Cloud Messaging 1、根级(项目级)Gradlegradle的dependencies中添加: dependencies {...// Add the dependency for the Google services Gradle pluginclasspath com.google.gm…...
Neo4j恢复
主要记录windows环境下从备份文件中恢复Neo4j, Linux环境同理 备份在上一篇中有介绍,参考: Neo4j备份-CSDN博客 误删数据 为了模拟误删除场景,我们查询Person,并模拟误操作将其进行删除; match(p:Person) return …...
ZZULIOJ 1114: 逆序
题目描述 输入n(1<n<10)和n个整数,逆序输出这n个整数。 输入 输入n(1<n<10),然后输入n个整数。 输出 逆序输出这n个整数,每个整数占4列,右对齐。 样例输入 Copy …...
Linux前后端项目部署
目录 1.jdk&tomcat安装 配置并且测试jdk安装 修改tomcat 配置文件 登入tomcat 发布 安装mysql 导入sql数据 发布项目war包 redis安装 nginx安装 配置nginx域名映射 部署前端项目 centos 7的服务安装 安装jdk 安装tomcat 安装Mysql 安装redis 安装nginx 前后…...
GPT-4与DALL·E 3:跨界融合,开启绘画与文本的新纪元
在人工智能的发展浪潮中,MidTool(https://www.aimidtool.com/)的GPT-4与DALLE 3的集成代表了一个跨越式的进步。这一集成不仅仅是技术的结合,更是艺术与文字的完美融合,它为创意产业带来了革命性的变革。本文将探讨GPT…...
聊聊PowerJob的Alarmable
序 本文主要研究一下PowerJob的Alarmable Alarmable tech/powerjob/server/extension/Alarmable.java public interface Alarmable {void onFailed(Alarm alarm, List<UserInfoDO> targetUserList); }Alarmable接口定义了onFailed方法,其入参为alarm及tar…...
系列三十五、获取Excel中的总记录数
一、获取Excel中的总记录数 1.1、概述 使用EasyExcel开发进行文件上传时,通常会碰到一个问题,那就是Excel中的记录数太多,使用传统的方案进行文件上传,很容易就超时了,这时可以通过对用户上传的Excel中的数量进行限制…...
VMware workstation安装debian-12.1.0虚拟机并配置网络
VMware workstation安装debian-12.1.0虚拟机并配置网络 Debian 是一个完全自由的操作系统!Debian 有一个由普罗大众组成的社区!该文档适用于在VMware workstation平台安装debian-12.1.0虚拟机。 1.安装准备 1.1安装平台 Windows 11 1.2软件信息 软…...
centos下系统全局检测工具dstat使用
目录 一:没有需要安装 二:dstat命令参数 三、监测界面各参数含义(部分) 四、dstat的高级用法 一:没有需要安装 yum install dstat 二:dstat命令参数 有默认选项,执行dstat命令不加任何参数…...
无人机群ros通信
单架无人机与地面站通信 在一个局域网内获取无人机的机载电脑ip 通过地面站ssh到机载电脑,实现通信 多架无人机与地面站通信 在ROS基础上,配置主机和从机,实现主机和从机的话题联通 配置hosts 在主机和从机的/etc/hosts文件中,…...
LeetCode刷题:142. 环形链表 II
题目: 是否独立解决:否,参考了解题思路解决问题,思考了用快慢指针,栈,统计链表数量定位尾巴节点(因为是环形链表所以是死循环,链表数量用while循环统计不出来)都没解决 解…...
Laravel 使用rdkafka_laravel详细教程(实操避坑)
一、选择rdkafka 首先要看版本兼容问题,我的是Laravel5.6,PHP是7.3.13,所以需要下载兼容此的rdkafka,去 Packagist 搜索 kafka ,我用的是 enqueue/rdkafka选择里面0.10.5版本, 二、安装rdkafka 在 Larav…...
439 - Knight Moves (UVA)
题目链接如下: Online Judge UVA439 骑士的移动 - 锦依卫议事堂 - 洛谷博客 这里有好几个特别厉害的解法...先存着慢慢看。 我的代码如下: #include <iostream> #include <deque> #include <string> // #define debugstruct node{…...
数据结构(c)冒泡排序
本文除了最下面的代码是我写的,其余是网上抄写的。 冒泡排序 什么是冒泡排序? 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
