当前位置: 首页 > news >正文

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序)

索引库操作

mapping属性

mapping是对文档的约束,常见约束属性包括:

创建索引库

#创建索引库
PUT /heima
{"mappings": {"properties": {"info":{"type": "text","analyzer": "ik_smart"},"email":{"type": "keyword","index": false},"name":{"type": "object","properties": {"firstName":{"type":"keyword"},"lastName":{"type":"keyword"}}}}}
}

 如下所示,成功创建一个索引库

查询,删除,修改索引库

 在es中不允许修改索引库,但可以添加新的字段

#添加新字段
PUT /heima/_mapping  
{"properties":{"age":{"type":"integer"}}
}

然后重新获取就有新的字段出现了

文档操作

新增文档

在索引库插入一个规定格式的数据就像在一个数据库表里面插入一条数据。 

POST /heima/_doc/1
{"info":"北岭山脚鼠鼠","email":"yhy@beiling.cn","name":{"firstName":"云","lastName":"赵"}
}

查询和删除

 

修改文档

有两种修改方式——全量修改

 全量修改与新增文档几乎一模一样就是方法名不同 

#全量修改文档PUT /heima/_doc/1
{"info":"北岭鼠鼠","email":"yhy@beiling.cn","name":{"firstName":"云","lastName":"赵"}
}

#局部修改文档字段
POST /heima/_doc/1
{"doc":{"email":"123@123.cn"}
}

RestClient操作索引库(java)

入门案例

导入Demo

创建一个名为heima的数据库运行给好的SQL文件就可以得到如下。

 然后导入准备好的项目

 分析数据结构

 id属性较为特殊,在索引库里面是字符串,并且不分词,所以用的是keyword类型

address不参与搜索,选择index置为false.

starName使用驼峰命名法。

地理坐标较为特殊,由两个字段组成,使用一个location字段表示

 有多个字段同时参与搜索,但是通常一个字段的查询效率比较高,解决方法如下,用一个all字段包含多个字段就可以根据其中一个字段搜索到多个字段的内容了。并且all字段不参与倒排索引

定义对应的Mapping映射

PUT /hotel
{"mappings": {"properties": {"id":{"type": "keyword"},"name":{"type": "text","analyzer": "ik_max_word", "copy_to": "all"},"address":{"type":"keyword","index": false},"price":{"type":"integer"},"score":{"type": "integer"},"brand":{"type": "keyword","copy_to": "all"},"city":{"type": "keyword"        },"starName":{"type": "keyword"},"business":{"type": "keyword","copy_to": "all"},"location":{"type":"geo_point"},"pic":{"type":"keyword","index": false},"all":{"type": "text","analyzer": "ik_max_word"}}}
}

初始化JavaRestClient

        <!--elasticsearch--><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.12.1</version></dependency>

不指定版本的话里面有子依赖会用默认7.6版本。

创建新的测试类

使用Before注解在最开始创建,之后可以直接使用。

public class HotelIndexTest {private RestHighLevelClient client;@Testvoid testInit(){System.out.println(client);}//执行前初始化@BeforeEachvoid setUp(){this.client=new RestHighLevelClient(RestClient.builder(HttpHost.create("http://xxx.xxx.xxx.xxx:9200")//HttpHost.create("http://xxx.xxx.xxx.xxx:9200") 集群时添加更多的地址));}//销毁@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

创建索引库

 准备一个实体对象静态属性

public class HotelConstants {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" +"      },\n" +"      \"starName\":{\n" +"        \"type\": \"keyword\"\n" +"      },\n" +"      \"business\":{\n" +"        \"type\": \"keyword\",\n" +"        \"copy_to\": \"all\"\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" +"}";
}
    @Testvoid createHotelIndex() throws IOException {//1.创建Request对象CreateIndexRequest request = new CreateIndexRequest("hotel");//2.准备请求的参数request.source(MAPPING_TEMPLATE, XContentType.JSON);//3.发送请求client.indices().create(request, RequestOptions.DEFAULT);}

运行后可以查询到对应的索引库

 删除和判断索引库

 

    @Testvoid testDeleteHotelIndex() throws IOException {//1.创建Request对象DeleteIndexRequest request = new DeleteIndexRequest("hotel");//2.发送请求client.indices().delete(request, RequestOptions.DEFAULT);}@Testvoid testExistsHotelIndex() throws IOException {//1.创建Request对象GetIndexRequest request = new GetIndexRequest("hotel");//2.发送请求boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);//3.输出System.out.println(exists?"索引库已存在":"索引库不存在");}

总结:

 RestClient操作文档

初始化和上面一样

 添加文档

 这里将查询数据库的数据插入到索引库当中,但是索引库中的location是将两个数据拼到一起的,所以这里有两个实体类,一个对应数据库,一个对应索引库,从数据库查出来之后还要转到索引库数据类型。

然后再序列化层JSON风格的数据。

@SpringBootTest
public class HotelDocumentTest {private RestHighLevelClient client;@Autowiredprivate IHotelService hotelService;@Testvoid testAddDocument() throws IOException {//根据id查询酒店数据Hotel hotel = hotelService.getById(61083L);//转换为文档类型HotelDoc hotelDoc = new HotelDoc(hotel);//1.准备Request对象IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());//2.准备JSON文档request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);//3.发送请求client.index(request,RequestOptions.DEFAULT);}//执行前初始化@BeforeEachvoid setUp(){this.client=new RestHighLevelClient(RestClient.builder(HttpHost.create("http://119.91.147.100:9200")//HttpHost.create("http://xxx.xxx.xxx.xxx:9200") 集群时添加更多的地址));}//销毁@AfterEachvoid tearDown() throws IOException {this.client.close();}
}

这里使用给定的项目代码在数据库配置中有错误

改成如下

url: jdbc:mysql://localhost:3306/heima?allowPublicKeyRetrieval=true&useSSL=false

成功弄执行后便可查询到 

 查询文档

 

    @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);}

成功查询得到

更新文档

    @Testvoid testUpdate() throws IOException {//1.准备requestUpdateRequest request = new UpdateRequest("hotel", "61083");//2.准备请求参数request.doc("price","961","starName","三转");//3.发送请求client.update(request,RequestOptions.DEFAULT);}

 

删除文档 

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

 总结

批量导入文档

 

    @Testvoid testBulkRequest() throws IOException {//批量查询酒店数据List<Hotel> hotels = hotelService.list();//1.创建requestBulkRequest request = new BulkRequest();//2.准备参数,添加多个新增的requestfor (Hotel hotel : hotels) {//转换为文档类型HotelDoc hotelDoc = new HotelDoc(hotel);//创建新增文档的Request对象request.add(new IndexRequest("hotel").id(hotel.getId().toString()).source(JSON.toJSONString(hotelDoc),XContentType.JSON));}//3.发送请求client.bulk(request,RequestOptions.DEFAULT);}

 然后可以查询得到201条数据

 

相关文章:

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序)

索引库操作 mapping属性 mapping是对文档的约束&#xff0c;常见约束属性包括: 创建索引库 #创建索引库 PUT /heima {"mappings": {"properties": {"info":{"type": "text","analyzer": "ik_smart"},…...

【性能测试】性能数据采集工具nmon安装使用及报告参数含义详解

目录 nmon nmon下载 解压安装 启动 数据采集配置 生成图形结果 nmon报告中的参数含义 资料获取方法 nmon nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具&#xff0c;它能在系统运行过程中实时地捕捉系统资源的使用情况&#xff0c;并且能输出结果到文…...

『PostgreSQL』在 PostgreSQL中创建只读权限和读写权限的账号

&#x1f4e3;读完这篇文章里你能收获到 理解在 PostgreSQL 数据库中创建账号的重要性以及如何进行账号管理掌握在 PostgreSQL 中创建具有只读权限和读写权限的账号的步骤和方法学会使用 SQL 命令来创建账号、为账号分配适当的权限以及控制账号对数据库的访问级别了解如何确保…...

基于Java+SpringBoot+Vue的网上书城管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…...

安全渗透——AWK知识整理

1.awk的定义 awk是一种编程语言&#xff0c;用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件&#xff0c;或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能&#xff0c;是linux/unix下的一个强大编程工具。它在命令行…...

计算机视觉的应用9-视觉领域中的61个经典数据集【大集合】的应用与实战

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用9-视觉领域中的61个经典数据集【大集合】的应用与实战,我们都知道计算机视觉是一门研究如何使计算机能够理解和解释数字图像或视频的技术和方法。在计算机视觉领域中,数据集是非常重要的资源,它们可以用于训练和评估…...

Go中for循环的遮挡效应

注意&#xff1a;遮挡不是替换 在一个for循环中&#xff0c;如果我们在循环体内部声明了一个与初始化语句中的变量同名的变量&#xff0c;那么这个新变量会“遮挡”外部的同名变量。但这种遮挡只在声明它的那一行代码开始&#xff0c;直到循环体结束的范围内有效。当下一次循环…...

UE4 Cesium 学习笔记

Cesium中CesiumGeoreference的原点Orgin&#xff0c;设置到新的位置上过后&#xff0c;将FloatingPawn的Translation全改为0&#xff0c;才能到对应的目标点上去 在该位置可以修改整体建筑的材质 防止刚运行的时候&#xff0c;人物就掉下场景之下&#xff0c;controller控制的…...

【LeetCode】322.零钱兑换

题目 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无限的…...

中电金信:国际结算系统的“王冠”,为什么十年都戴在“它”的头上

2001年&#xff0c;中国正式加入WTO&#xff0c;在此后的二十多年里&#xff0c;中国出口席卷全球&#xff0c;迅速成长为一个贸易大国。 作为跨国贸易不可或缺的一环&#xff0c;无论是商品交易、服务提供、资金分配还是国际借贷等&#xff0c;都需要通过银行办理的外汇收支业…...

java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis em

​ 鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内…...

fine-tuning(微调)的理解

fine-tuning 介绍 什么情况下使用微调 微调指导事项 不同数据集下使用微调 涉及到的其他知识 学习率&#xff08;learning-rate&#xff09; 卷积神经网络的核心 迁移学习与微调 什么是迁移学习 为什么要迁移学习 详细解释 自己的理解&#xff08;不知道对不对&#xff09; 介绍…...

深入理解设计模式面经

1 讲讲工厂方法模式&#xff0c; 1.1 给我一个java的demo 工厂方法模式是一种创建型设计模式&#xff0c;它提供了一个接口用于创建对象&#xff0c;但允许子类修改将要创建的对象类型。这种模式抽象了对象的创建过程&#xff0c;使得代码可以在不知道创建的对象具体类的情况…...

STM32单片机蓝牙APP宠物自动喂食器定时语音提醒喂食系统设计

实践制作DIY- GC00162---蓝牙APP宠物自动喂食器 一、功能说明&#xff1a; 基于STM32单片机设计---蓝牙APP宠物自动喂食器 二、功能说明&#xff1a; STM32F103C系列最小系统板LCD1602显示器DS1302时钟模块5个按键语音播报模块ULN2003步进电机模块LED灯板HC-05蓝牙模块&#x…...

武汉凯迪正大—串联谐振在电力系统中应用的优点:

变频串联谐振耐压试验装置在电力系统中应用的优点 1、所需电源容量大大减小。串联谐振电源是利用谐振电抗器和被试品电容谐振产生高电压和大电流的&#xff0c;在整个系统中&#xff0c;电源只需要提供系统中有功消耗的部分&#xff0c;因此&#xff0c;试验所需的电源功率只有…...

Git仓库、分支的区别

https://blog.csdn.net/weixin_30315905/article/details/94954617 git 仓库、分支的区别 首先&#xff0c;要明白仓库的概念 仓库可以理解为repository&#xff0c; 就是存放代码的地方&#xff0c;—— 其实是一个比较笼统的概念&#xff0c;不管里面的内容&#xff0c;总之…...

C#生成随机验证码

以下是一个简单的C#验证码示例&#xff1a; private void GenerateCaptcha() {// 生成随机字符串string chars "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";Random random new Random();string captchaString new string(Enumerable.Repe…...

如何使用C++来找出编码88表示的字符?指出至少两种方法。

在C中&#xff0c;可以使用整型值来表示字符编码&#xff0c;其中ASCII码是最常见的字符编码方案。要找出编码为88的字符&#xff0c;可以使用以下两种方法&#xff1a; 方法一&#xff1a;使用类型转换&#xff08;显式类型转换或隐式类型转换&#xff09;将整型值转换为字符…...

Kafka:springboot集成kafka收发消息

kafka环境搭建参考Kafka&#xff1a;安装和配置_moreCalm的博客-CSDN博客 1、springboot中引入kafka依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><…...

本质矩阵E、基本矩阵F、单应矩阵H

1. E (归一化坐标对进行计算) t ^ R 为3*3的矩阵, 因为R,t共有6个自由度&#xff0c;又因为单目尺度等价性&#xff0c;所以实际上E矩阵共有5个自由度。因此至少需要5个点对来求解。 2. 基本矩阵F:根据两帧间匹配的像素点对儿计算 3*3且自由度为7的矩阵kF也为基础矩阵&#x…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...