springboot初试elasticsearch
引入依赖
elasticsearch的依赖版本与你elasticsearch要一致
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
索引库的操作
创建索引库
import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;import java.io.IOException;public class HotelIndexTest {// 创建索引语句public static final String MAPPING_TEMPLATE = "{\n" +" \"mappings\": {\n" +" \"properties\": {\n" +" \"id\": {\n" +" \"type\": \"keyword\"\n" +" },\n" +" \"name\":{\n" +" \"type\": \"text\",\n" +" \"analyzer\": \"ik_max_word\",\n" +" \"copy_to\": \"all\"\n" +" },\n" +" \"address\":{\n" +" \"type\": \"keyword\",\n" +" \"index\": false\n" +" },\n" +" \"price\":{\n" +" \"type\": \"integer\"\n" +" },\n" +" \"score\":{\n" +" \"type\": \"integer\"\n" +" },\n" +" \"brand\":{\n" +" \"type\": \"keyword\",\n" +" \"copy_to\": \"all\"\n" +" },\n" +" \"city\":{\n" +" \"type\": \"keyword\",\n" +" \"copy_to\": \"all\"\n" +" },\n" +" \"starName\":{\n" +" \"type\": \"keyword\"\n" +" },\n" +" \"business\":{\n" +" \"type\": \"keyword\"\n" +" },\n" +" \"location\":{\n" +" \"type\": \"geo_point\"\n" +" },\n" +" \"pic\":{\n" +" \"type\": \"keyword\",\n" +" \"index\": false\n" +" },\n" +" \"all\":{\n" +" \"type\": \"text\",\n" +" \"analyzer\": \"ik_max_word\"\n" +" }\n" +" }\n" +" }\n" +"}";private RestHighLevelClient client;// 创建索引库@Testvoid createHotelIndex() throws IOException {// 1.创建Request对象CreateIndexRequest request = new CreateIndexRequest("hotel");// 2.准备请求的参数:DSL语句request.source(MAPPING_TEMPLATE, XContentType.JSON);// 3.发送请求client.indices().create(request, RequestOptions.DEFAULT);}// 初始化连接@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://43.139.59.28:9200")));}// 关闭连接@AfterEachvoid tearDown() throws IOException {this.client.close();}
}
查看索引库

删除索引库
@Testvoid testDeleteHotelIndex() throws IOException {// 1.创建Request对象DeleteIndexRequest request = new DeleteIndexRequest("hotel");// 2.发送请求client.indices().delete(request, RequestOptions.DEFAULT);}
查看索引库

文档的操作
数据库实体类
数据库查询后的结果是一个Hotel类型的对象
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("tb_hotel")
public class Hotel {@TableId(type = IdType.INPUT)private Long id;private String name;private String address;private Integer price;private Integer score;private String brand;private String city;private String starName;private String business;private String longitude;private String latitude;private String pic;
}
文档实体类
索引库查询后的结果是一个HotelDoc类型的对象,与Hotel不同在于横纵坐标的处理.
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
public class HotelDoc {private Long id;private String name;private String address;private Integer price;private Integer score;private String brand;private String city;private String starName;private String business;private String location;private String pic;public HotelDoc(Hotel hotel) {this.id = hotel.getId();this.name = hotel.getName();this.address = hotel.getAddress();this.price = hotel.getPrice();this.score = hotel.getScore();this.brand = hotel.getBrand();this.city = hotel.getCity();this.starName = hotel.getStarName();this.business = hotel.getBusiness();// 合并横纵坐标this.location = hotel.getLatitude() + ", " + hotel.getLongitude();this.pic = hotel.getPic();}
}
新增文档
@Resourceprivate HotelService hotelService;@Testvoid testAddDocument() throws IOException {// 1.根据id查询酒店数据Hotel hotel = hotelService.getById(61083L);// 2.转换为文档类型HotelDoc hotelDoc = new HotelDoc(hotel);// 3.将HotelDoc转jsonString json = JSON.toJSONString(hotelDoc);// 1.准备Request对象IndexRequest request = new IndexRequest("hotel").id(hotelDoc.getId().toString());// 2.准备Json文档request.source(json, XContentType.JSON);// 3.发送请求client.index(request, RequestOptions.DEFAULT);}
查询文档
@Testvoid testGetDocumentById() throws IOException {// 1.准备RequestGetRequest request = new GetRequest("hotel", "61083");// 2.发送请求,得到响应GetResponse response = client.get(request, RequestOptions.DEFAULT);// 3.解析响应结果String json = response.getSourceAsString();HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);System.out.println(hotelDoc);}
结果

修改文档
修改我们讲过两种方式:
全量修改:本质是先根据id删除,再新增
增量修改:修改文档中的指定字段值
在RestClient的API中,全量修改与新增的API完全一致,这里不再赘述,我们主要关注增量修改
@Testvoid testUpdateDocument() throws IOException {// 1.准备RequestUpdateRequest request = new UpdateRequest("hotel", "61083");// 2.准备请求参数request.doc("price", "952","starName", "四钻");// 3.发送请求client.update(request, RequestOptions.DEFAULT);}
查看文档

删除文档
@Testvoid testDeleteDocument() throws IOException {// 1.准备RequestDeleteRequest request = new DeleteRequest("hotel", "61083");// 2.发送请求client.delete(request, RequestOptions.DEFAULT);}
查询61083文档

批量导入文档
利用BulkRequest批量将数据库数据导入到索引库中
@Testvoid testBulkRequest() throws IOException {// 批量查询酒店数据List<Hotel> hotels = hotelService.list();// 1.创建RequestBulkRequest request = new BulkRequest();// 2.准备参数,添加多个新增的Requestfor (Hotel hotel : hotels) {// 2.1.转换为文档类型HotelDocHotelDoc hotelDoc = new HotelDoc(hotel);// 2.2.创建新增文档的Request对象request.add(new IndexRequest("hotel").id(hotelDoc.getId().toString()).source(JSON.toJSONString(hotelDoc), XContentType.JSON));}// 3.发送请求client.bulk(request, RequestOptions.DEFAULT);}
查看所有文档
@Testvoid testMatchAll() throws IOException {// 1.准备RequestSearchRequest request = new SearchRequest("hotel");// 2.准备DSLrequest.source().query(QueryBuilders.matchAllQuery());// 3.发送请求SearchResponse response = client.search(request, RequestOptions.DEFAULT);// 4.解析响应System.out.println(response);}
结果

相关文章:
springboot初试elasticsearch
引入依赖 elasticsearch的依赖版本与你elasticsearch要一致 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency> 索引库的操作 创建索引库 impo…...
Node.js安装教程图文详解
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 下载Node.js 请下载Node.js并保存至本地,官方网址:https://nodejs.org/zh-cn/ 在此,选择windows系统64位的16.13.1版本进行下载。 下载…...
laragon 为 php 安装 Xdebug 扩展
众所周知,php 自带的 var_dump() 输出格式很不直观 而 laragon 作为很好的 windos 下开发环境很受欢迎,本文就介绍如何快速为 laragon 的 php 安装 Xdebug,方便开发调试 一:启动开发环境,在任意可访问 php 页面中输出 …...
华为云 存在不支持迁移的外键解决方法
DRS 检测出源端存在不支持的外键引用操作 MySQL、GaussDB(for MySQL)为源的全量增量或增量迁移、同步场景,以及MySQL、GaussDB(for MySQL)为源灾备场景 表1 源端存在不支持的外键引用操作 预检查项 源端存在不支持的外键引用操作。 描述 同步对象中存在包含CASC…...
Linux 中的 cd 命令及示例
cd命令在Linux 中称为更改目录命令。它用于有效地从当前工作目录移动到系统中的不同目录。 Linux 中 `cd` 命令的语法 光盘[目录] cd [directory]在这里,将 [directory] 替换为您要导航到的目标目录的路径。 “cd”命令的实际实现与示例。...
【VUE】
概念 VUE是一个用于构建用户界面的渐进式框架 构建用户界面:基于数据渲染出用户看到的界面 渐进式:声明式渲染->组件系统->客户端路由->大规模状态管理->构建工具 框架:一套完整的项目解决方案 VUE使用方式: 1.…...
详解初阶数据结构之顺序表(SeqList)——单文件文件实现SeqList的增删查改
目录 一、线性表 二、顺序表 2.1概念及结构 2.2接口实现 2.3动态顺序表的创建 2.3动态顺序表的初始化 2.3.1传值初始化 2.3.2传址初始化 2.4动态顺序表的清空 2.5动态顺序表的扩容 2.6动态顺序表内容的打印 三、动态顺序表的使用 3.1尾插尾删 3.1.1尾插 3.1.2尾删…...
JavaScript中的深拷贝和浅拷贝
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浅拷贝(Shallow Copy):⭐深拷贝(Deep Copy):⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带…...
树形结构的节点作为查询参数业务
1、业务描述 有一个树结构,存在一个唯一的code和一个父节点的pcode,要求前端传入任意层的code匹配这个code对应的所有子节点对应的数据。 2、解决思路 因为无法判定传入的code到底在那层,so 直接递归调用查询判断,如果有子节点就…...
sql:SQL优化知识点记录(十二)
(1)读锁案例讲解 加读锁和写锁 查看是否上锁:In_use:变成了1 读写锁对我们数据产生哪些影响: 读锁:是共享锁,其他线程可以查看: 加了读锁:session1不能修改自己…...
一.使用qt creator 设计显示GUI
一.安装qt creator 二.创建项目 文件-》新建项目 三.使用设计 可以直接使用鼠标拖拽 四.转换为py文件 # from123.py 为导出 py文件的文件名 form.ui 为 qt creator创造的 ui 文件 pyuic5 -o x:\xxx\from123.py form.ui五.显示GUI from PyQt5.QtWidgets import * fr…...
sql:SQL优化知识点记录(八)
(1)索引面试题分析 所谓索引:就是排好序的快速查找数据结构,排序家查找是索引的两个用途 select * 在where使用到了索引,当select * 有模糊查询%在左边索引会失效 当select * where后面索引的顺序发生变化࿰…...
java笔试题,寻找多出来的元素
题目:有两个数组a和b,其中b有一个元素是a没有的,其他元素都相同,请找出b中这个多余的元素。 1 public class Test02 { 2 3 public static void main(String[] args) { 4 int[] a {11, 34, 9, -4, 100, 98}; 5 int[] b {34…...
docker笔记3 Docker常规安装
1.安装tomcat docker hub上面查找tomcat镜像 docker search tomcat 从docker hub上拉取tomcat镜像到本地 docker pull tomcat docker images查看是否有拉取到的tomcat 使用tomcat镜像创建容器实例(也叫运行镜像) docker run -it -p 8080:8080 tomcat -p 小写,主…...
阻止 NTLM后无法登录远程桌面的原因
阻止 NTLM(NT LAN Manager) 攻击设置二 之前郑州景安的服务器被攻击,没过几天阿里云的也被攻击,且都是 NTLM 攻击。 Operating System: Windows Server 2008(R2) Enterprise Service Pack 1 64bit 一、winr 输入 gpedit.msc 二、依次进入:…...
Docker网络功能
基本网络功能 Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。使用docker network子命令来管理Docker网络。 外部访问容器可通过端口映射实现,启动容器时使用-p参数指定映射关系。-p可多次使用来绑定多个端口。使用docker port命令查看当前映射的端…...
如何入门 AI----如何确定学习目标
当确定学习人工智能(AI)的目标时,可以考虑以下具体的步骤: 兴趣和好奇心: 首先,问问自己,您对哪些 AI 领域感兴趣?是机器学习、自然语言处理、计算机视觉,还是其他领域&a…...
ABAP中加前导零和去前导零方法
文章目录 1 Introduction2 Method 1 Introduction In the sap there are two method for leading zero. We can use function or use the below the method . 2 Method SELECT * INTO TABLE DATA(IT_ITEM)FROM MARA .LOOP AT IT_ITEM ASSIGNING FIELD-SYMBOL(<FS_DATA&g…...
聊聊ShardingSphere是怎么进行sql重写的
序 本文主要研究一下ShardingSphere进行sql重写的原理 prepareStatement org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java public final class ShardingSphereConnection extends AbstractConnectionAdapter {Overridepublic Prepar…...
软件设计模式系列之二——抽象工厂模式
1 抽象工厂模式的定义 抽象工厂模式是一种创建型设计模式,它提供了一种创建一组相关或相互依赖对象的方式,而无需指定它们的具体类。该模式以一组抽象接口为核心,包括抽象工厂接口和一组抽象产品接口,每个具体工厂类负责创建特定…...
通义千问1.5-1.8B-Chat-GPTQ-Int4在Keil开发环境中的嵌入式AI应用
通义千问1.5-1.8B-Chat-GPTQ-Int4在Keil开发环境中的嵌入式AI应用 在MCU上跑AI大模型?这听起来像是天方夜谭,但通义千问1.5-1.8B-Chat-GPTQ-Int4让这成为了现实。 1. 嵌入式AI的新可能 如果你正在开发智能家电、工业控制器或者物联网设备,可…...
基于FLUX.2-klein-base-9b-nvfp4的Java后端服务集成指南
基于FLUX.2-klein-base-9b-nvfp4的Java后端服务集成指南 最近在做一个内容创作平台的后台重构,产品经理提了个需求,希望用户上传的草图或者简单的线框图,能自动转换成更精美的概念图。这要是放在以前,要么找设计师手动处理&#…...
科研党必备:PSCAD+MATLAB联合仿真环境搭建全流程(从软件下载到Example测试成功)
科研党必备:PSCADMATLAB联合仿真环境搭建全流程(从软件下载到Example测试成功) 当一台崭新的Win11系统电脑摆在面前,电力电子与新能源领域的研究者往往面临第一个挑战:如何快速搭建可靠的PSCAD与MATLAB联合仿真环境&a…...
从提示词到成图:雯雯的后宫-造相Z-Image-瑜伽女孩真实案例分享(含新月式示例)
从提示词到成图:雯雯的后宫-造相Z-Image-瑜伽女孩真实案例分享(含新月式示例) 想用AI生成一张完美的瑜伽女孩图片,却总是被“AI手”、“奇怪姿势”和“塑料感”劝退?别急,今天我们就来手把手拆解一个真实案…...
MiniCPM-o-4.5-nvidia-FlagOS与Claude对比分析:在复杂推理任务上的差异化表现
MiniCPM-o-4.5-nvidia-FlagOS与Claude对比分析:在复杂推理任务上的差异化表现 最近在AI圈子里,关于不同模型在复杂推理任务上的表现,讨论得挺热闹的。特别是像MiniCPM-o-4.5-nvidia-FlagOS(后面简称MiniCPM)和Claude这…...
FPGA图像处理入门:OV7670+DVP接口数据采集的那些‘坑’与优化策略
FPGA图像处理实战:OV7670DVP接口数据采集的工程级优化指南 当你在实验室调试OV7670摄像头时,是否遇到过这些场景:VGA显示器上的图像突然撕裂、颜色通道错乱,或是帧率莫名其妙降到个位数?作为一款经典的VGA分辨率CMOS传…...
nli-distilroberta-base开源协作:使用GitHub管理模型微调与实验代码
nli-distilroberta-base开源协作:使用GitHub管理模型微调与实验代码 1. 为什么需要GitHub管理AI项目 当你开始一个AI项目时,代码版本管理往往是最容易被忽视的环节。想象一下这样的场景:你花了三天时间调整模型参数,效果提升了5…...
手把手教你用Gemini 3和MediaPipe,为你的网页添加“隔空操控”魔法(附完整代码)
从零构建手势操控3D粒子系统:MediaPipe与Three.js深度整合指南 当我们在科幻电影中看到主角挥挥手就能操控全息界面时,总会心生向往。如今,借助MediaPipe的手势识别能力和Three.js的3D渲染技术,开发者完全可以在网页中实现这种&qu…...
毫米波雷达(AWR1864)二、从零到一:SDK配置与固件刷写实战
1. 毫米波雷达开发环境搭建全攻略 第一次接触AWR1864毫米波雷达开发板时,最让人头疼的就是软件环境的配置。记得我刚开始用这块板子的时候,光是为了让开发板识别出来就折腾了大半天。这里给大家分享一个Windows系统下的完整配置方案,帮你避开…...
EcomGPT-中英文-7B电商模型Vue前端集成:打造智能电商管理后台
EcomGPT-中英文-7B电商模型Vue前端集成:打造智能电商管理后台 你是不是也遇到过这样的场景?作为电商运营,每天要写几十条商品描述、营销文案,绞尽脑汁也想不出新花样;面对海量的用户评论,想快速了解用户情…...
