网站建设及维护招聘网站建立不安全怎么取消

web/2025/9/27 8:19:41/文章来源:
网站建设及维护招聘,网站建立不安全怎么取消,dedecms导入网站模板,温州营销网站公司哪家好分布式搜索引擎01 – elasticsearch基础 0.学习目标 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎#xff0c;具备非常多强大功能#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如#xff1a; …分布式搜索引擎01 – elasticsearch基础 0.学习目标 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎具备非常多强大功能可以帮助我们从海量数据中快速找到需要的内容 例如 在GitHub搜索代码 在电商网站搜索商品 在百度搜索答案 在打车软件搜索附近的车 1.1.2.ELK技术栈 elasticsearch结合kibana、Logstash、Beats也就是elastic stackELK。被广泛应用在日志数据分析、实时监控等领域 而elasticsearch是elastic stack的核心负责存储、搜索、分析数据。 1.1.3.elasticsearch和lucene elasticsearch底层是基于lucene来实现的。 Lucene是一个Java语言的搜索引擎类库是Apache公司的顶级项目由DougCutting于1999年研发。官网地址https://lucene.apache.org/ 。 elasticsearch的发展历史 2004年Shay Banon基于Lucene开发了Compass2010年Shay Banon 重写了Compass取名为Elasticsearch。 1.1.4.为什么不是其他搜索技术 虽然在早期Apache Solr是最主要的搜索引擎技术但随着发展elasticsearch已经渐渐超越了Solr独占鳌头 1.1.5.总结 什么是elasticsearch 一个开源的分布式搜索引擎可以用来实现搜索、日志统计、分析、系统监控等功能 什么是elastic stackELK 是以elasticsearch为核心的技术栈包括beats、Logstash、kibana、elasticsearch 什么是Lucene 是Apache的开源搜索引擎类库提供了搜索引擎的核心API 1.2.倒排索引 倒排索引的概念是基于MySQL这样的正向索引而言的。 1.2.1.正向索引 那么什么是正向索引呢例如给下表tb_goods中的id创建索引 如果是根据id查询那么直接走索引查询速度非常快。 但如果是基于title做模糊查询只能是逐行扫描数据流程如下 1用户搜索数据条件是title符合%手机% 2逐行获取数据比如id为1的数据 3判断数据中的title是否符合用户搜索条件 4如果符合则放入结果集不符合则丢弃。回到步骤1 逐行扫描也就是全表扫描随着数据量增加其查询效率也会越来越低。当数据量达到数百万时就是一场灾难。 1.2.2.倒排索引 倒排索引中有两个非常重要的概念 文档Document用来搜索的数据其中的每一条数据就是一个文档。例如一个网页、一个商品信息词条Term对文档数据或用户搜索数据利用某种算法分词得到的具备含义的词语就是词条。例如我是中国人就可以分为我、是、中国人、中国、国人这样的几个词条 创建倒排索引是对正向索引的一种特殊处理流程如下 将每一个文档的数据利用算法分词得到一个个词条创建表每行数据包括词条、词条所在文档id、位置等信息因为词条唯一性可以给词条创建索引例如hash表结构索引 倒排索引的搜索流程如下以搜索华为手机为例 1用户输入条件华为手机进行搜索。 2对用户输入内容分词得到词条华为、手机。 3拿着词条在倒排索引中查找可以得到包含词条的文档id1、2、3。 4拿着文档id到正向索引中查找具体文档。 虽然要先查询倒排索引再查询倒排索引但是无论是词条、还是文档id都建立了索引查询速度非常快无需全表扫描。 1.2.3.正向和倒排 那么为什么一个叫做正向索引一个叫做倒排索引呢 正向索引是最传统的根据id索引的方式。但根据词条查询时必须先逐条获取每个文档然后判断文档中是否包含所需要的词条是根据文档找词条的过程。 而倒排索引则相反是先找到用户要搜索的词条根据词条得到保护词条的文档的id然后根据id获取文档。是根据词条找文档的过程。 是不是恰好反过来了 那么两者方式的优缺点是什么呢 正向索引 优点 可以给多个字段创建索引根据索引字段搜索、排序速度非常快 缺点 根据非索引字段或者索引字段中的部分词条查找时只能全表扫描。 倒排索引 优点 根据词条搜索、模糊搜索时速度非常快 缺点 只能给词条创建索引而不是字段无法根据字段做排序 1.3.es的一些概念 elasticsearch中有很多独有的概念与mysql中略有差别但也有相似之处。 1.3.1.文档和字段 elasticsearch是面向**文档Document**存储的可以是数据库中的一条商品数据一个订单信息。文档数据会被序列化为json格式后存储在elasticsearch中 而Json文档中往往包含很多的字段Field类似于数据库中的列。 1.3.2.索引和映射 索引Index就是相同类型的文档的集合。 例如 所有用户文档就可以组织在一起称为用户的索引所有商品的文档可以组织在一起称为商品的索引所有订单的文档可以组织在一起称为订单的索引 因此我们可以把索引当做是数据库中的表。 数据库的表会有约束信息用来定义表的结构、字段的名称、类型等信息。因此索引库中就有映射mapping是索引中文档的字段约束信息类似表的结构约束。 1.3.3.mysql与elasticsearch 我们统一的把mysql与elasticsearch的概念做一下对比 MySQLElasticsearch说明TableIndex索引(index)就是文档的集合类似数据库的表(table)RowDocument文档Document就是一条条的数据类似数据库中的行Row文档都是JSON格式ColumnField字段Field就是JSON文档中的字段类似数据库中的列ColumnSchemaMappingMapping映射是索引中文档的约束例如字段类型约束。类似数据库的表结构SchemaSQLDSLDSL是elasticsearch提供的JSON风格的请求语句用来操作elasticsearch实现CRUD 是不是说我们学习了elasticsearch就不再需要mysql了呢 并不是如此两者各自有自己的擅长支出 Mysql擅长事务类型操作可以确保数据的安全和一致性 Elasticsearch擅长海量数据的搜索、分析、计算 因此在企业中往往是两者结合使用 对安全性要求较高的写操作使用mysql实现对查询性能要求较高的搜索需求使用elasticsearch实现两者再基于某种方式实现数据的同步保证一致性 1.4.安装es、kibana 1.4.1.安装 1.4.2.分词器 参考课前资料 1.4.3.总结 分词器的作用是什么 创建倒排索引时对文档分词用户搜索时对输入的内容分词 IK分词器有几种模式 ik_smart智能切分粗粒度ik_max_word最细切分细粒度 IK分词器如何拓展词条如何停用词条 利用config目录的IkAnalyzer.cfg.xml文件添加拓展词典和停用词典在词典中添加拓展词条或者停用词条 2.索引库操作 索引库就类似数据库表mapping映射就类似表的结构。 我们要向es中存储数据必须先创建“库”和“表”。 2.1.mapping映射属性 mapping是对索引库中文档的约束常见的mapping属性包括 type字段数据类型常见的简单类型有 字符串text可分词的文本、keyword精确值例如品牌、国家、ip地址数值long、integer、short、byte、double、float、布尔boolean日期date对象object index是否创建索引默认为trueanalyzer使用哪种分词器properties该字段的子字段 例如下面的json文档 {age: 21,weight: 52.1,isMarried: false,info: 黑马程序员Java讲师,email: zyitcast.cn,score: [99.1, 99.5, 98.9],name: {firstName: 云,lastName: 赵} }对应的每个字段映射mapping age类型为 integer参与搜索因此需要index为true无需分词器weight类型为float参与搜索因此需要index为true无需分词器isMarried类型为boolean参与搜索因此需要index为true无需分词器info类型为字符串需要分词因此是text参与搜索因此需要index为true分词器可以用ik_smartemail类型为字符串但是不需要分词因此是keyword不参与搜索因此需要index为false无需分词器score虽然是数组但是我们只看元素的类型类型为float参与搜索因此需要index为true无需分词器name类型为object需要定义多个子属性 name.firstName类型为字符串但是不需要分词因此是keyword参与搜索因此需要index为true无需分词器name.lastName类型为字符串但是不需要分词因此是keyword参与搜索因此需要index为true无需分词器 2.2.索引库的CRUD 这里我们统一使用Kibana编写DSL的方式来演示。 2.2.1.创建索引库和映射 基本语法 请求方式PUT请求路径/索引库名可以自定义请求参数mapping映射 格式 PUT /索引库名称 {mappings: {properties: {字段名:{type: text,analyzer: ik_smart},字段名2:{type: keyword,index: false},字段名3:{properties: {子字段: {type: keyword}}},// ...略}} }示例 PUT /heima {mappings: {properties: {info:{type: text,analyzer: ik_smart},email:{type: keyword,index: falsae},name:{properties: {firstName: {type: keyword}}},// ... 略}} }2.2.2.查询索引库 基本语法 请求方式GET 请求路径/索引库名 请求参数无 格式 GET /索引库名2.2.3.修改索引库 倒排索引结构虽然不复杂但是一旦数据结构改变比如改变了分词器就需要重新创建倒排索引这简直是灾难。因此索引库一旦创建无法修改mapping。 虽然无法修改mapping中已有的字段但是却允许添加新的字段到mapping中因为不会对倒排索引产生影响。 语法说明 PUT /索引库名/_mapping {properties: {新字段名:{type: integer}} }2.2.4.删除索引库 语法 请求方式DELETE 请求路径/索引库名 请求参数无 格式 DELETE /索引库名2.2.5.总结 索引库操作有哪些 创建索引库PUT /索引库名查询索引库GET /索引库名删除索引库DELETE /索引库名添加字段PUT /索引库名/_mapping 3.文档操作 3.1.新增文档 语法 POST /索引库名/_doc/文档id {字段1: 值1,字段2: 值2,字段3: {子属性1: 值3,子属性2: 值4},// ... }示例 POST /heima/_doc/1 {info: 黑马程序员Java讲师,email: zyitcast.cn,name: {firstName: 云,lastName: 赵} }3.2.查询文档 根据rest风格新增是post查询应该是get不过查询一般都需要条件这里我们把文档id带上。 语法 GET /{索引库名称}/_doc/{id}通过kibana查看数据 GET /heima/_doc/13.3.删除文档 删除使用DELETE请求同样需要根据id进行删除 语法 DELETE /{索引库名}/_doc/id值示例 # 根据id删除数据 DELETE /heima/_doc/13.4.修改文档 修改有两种方式 全量修改直接覆盖原来的文档增量修改修改文档中的部分字段 3.4.1.全量修改 全量修改是覆盖原来的文档其本质是 根据指定的id删除文档新增一个相同id的文档 注意如果根据id删除时id不存在第二步的新增也会执行也就从修改变成了新增操作了。 语法 PUT /{索引库名}/_doc/文档id {字段1: 值1,字段2: 值2,// ... 略 } 示例 PUT /heima/_doc/1 {info: 黑马程序员高级Java讲师,email: zyitcast.cn,name: {firstName: 云,lastName: 赵} }3.4.2.增量修改 增量修改是只修改指定id匹配的文档中的部分字段。 语法 POST /{索引库名}/_update/文档id {doc: {字段名: 新的值,} }示例 POST /heima/_update/1 {doc: {email: ZhaoYunitcast.cn} }3.5.总结 文档操作有哪些 创建文档POST /{索引库名}/_doc/文档id { json文档 }查询文档GET /{索引库名}/_doc/文档id删除文档DELETE /{索引库名}/_doc/文档id修改文档 全量修改PUT /{索引库名}/_doc/文档id { json文档 }增量修改POST /{索引库名}/_update/文档id { “doc”: {字段}} 4.RestAPI ES官方提供了各种不同语言的客户端用来操作ES。这些客户端的本质就是组装DSL语句通过http请求发送给ES。官方文档地址https://www.elastic.co/guide/en/elasticsearch/client/index.html 其中的Java Rest Client又包括两种 Java Low Level Rest ClientJava High Level Rest Client 我们学习的是Java HighLevel Rest Client客户端API 4.0.导入Demo工程 4.0.1.导入数据 首先导入课前资料提供的数据库数据 数据结构如下 CREATE TABLE tb_hotel (id bigint(20) NOT NULL COMMENT 酒店id,name varchar(255) NOT NULL COMMENT 酒店名称例7天酒店,address varchar(255) NOT NULL COMMENT 酒店地址例航头路,price int(10) NOT NULL COMMENT 酒店价格例329,score int(2) NOT NULL COMMENT 酒店评分例45就是4.5分,brand varchar(32) NOT NULL COMMENT 酒店品牌例如家,city varchar(32) NOT NULL COMMENT 所在城市例上海,star_name varchar(16) DEFAULT NULL COMMENT 酒店星级从低到高分别是1星到5星1钻到5钻,business varchar(255) DEFAULT NULL COMMENT 商圈例虹桥,latitude varchar(32) NOT NULL COMMENT 纬度例31.2497,longitude varchar(32) NOT NULL COMMENT 经度例120.3925,pic varchar(255) DEFAULT NULL COMMENT 酒店图片例:/img/1.jpg,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;4.0.2.导入项目 然后导入课前资料提供的项目: 4.0.3.mapping映射分析 创建索引库最关键的是mapping映射而mapping映射要考虑的信息包括 字段名字段数据类型是否参与搜索是否需要分词如果分词分词器是什么 其中 字段名、字段数据类型可以参考数据表结构的名称和类型是否参与搜索要分析业务来判断例如图片地址就无需参与搜索是否分词呢要看内容内容如果是一个整体就无需分词反之则要分词分词器我们可以统一使用ik_max_word 来看下酒店数据的索引库结构: 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,copy_to: all},starName:{type: keyword},business:{type: keyword},location:{type: geo_point},pic:{type: keyword,index: false},all:{type: text,analyzer: ik_max_word}}} }几个特殊字段说明 location地理坐标里面包含精度、纬度all一个组合字段其目的是将多字段的值 利用copy_to合并提供给用户搜索 4.0.4.初始化RestClient 在elasticsearch提供的API中与elasticsearch一切交互都封装在一个名为RestHighLevelClient的类中必须先完成这个对象的初始化建立与elasticsearch的连接。 分为三步 1引入es的RestHighLevelClient依赖 dependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-high-level-client/artifactId /dependency2因为SpringBoot默认的ES版本是7.6.2所以我们需要覆盖默认的ES版本 propertiesjava.version1.8/java.versionelasticsearch.version7.12.1/elasticsearch.version /properties3初始化RestHighLevelClient 初始化的代码如下 RestHighLevelClient client new RestHighLevelClient(RestClient.builder(HttpHost.create(http://192.168.150.101:9200) ));这里为了单元测试方便我们创建一个测试类HotelIndexTest然后将初始化的代码编写在BeforeEach方法中 package cn.itcast.hotel;import org.apache.http.HttpHost; import org.elasticsearch.client.RestHighLevelClient; 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 {private RestHighLevelClient client;BeforeEachvoid setUp() {this.client new RestHighLevelClient(RestClient.builder(HttpHost.create(http://192.168.150.101:9200)));}AfterEachvoid tearDown() throws IOException {this.client.close();} }4.1.创建索引库 4.1.1.代码解读 代码分为三步 1创建Request对象。因为是创建索引库的操作因此Request是CreateIndexRequest。2添加请求参数其实就是DSL的JSON参数部分。因为json字符串很长这里是定义了静态字符串常量MAPPING_TEMPLATE让代码看起来更加优雅。3发送请求client.indices()方法的返回值是IndicesClient类型封装了所有与索引库操作有关的方法。 4.1.2.完整示例 在hotel-demo的cn.itcast.hotel.constants包下创建一个类定义mapping映射的JSON字符串常量 package cn.itcast.hotel.constants;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 \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 }; }在hotel-demo中的HotelIndexTest测试类中编写单元测试实现创建索引 Test void 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); }4.2.删除索引库 删除索引库的DSL语句非常简单 DELETE /hotel与创建索引库相比 请求方式从PUT变为DELTE请求路径不变无请求参数 所以代码的差异注意体现在Request对象上。依然是三步走 1创建Request对象。这次是DeleteIndexRequest对象2准备参数。这里是无参3发送请求。改用delete方法 在hotel-demo中的HotelIndexTest测试类中编写单元测试实现删除索引 Test void testDeleteHotelIndex() throws IOException {// 1.创建Request对象DeleteIndexRequest request new DeleteIndexRequest(hotel);// 2.发送请求client.indices().delete(request, RequestOptions.DEFAULT); }4.3.判断索引库是否存在 判断索引库是否存在本质就是查询对应的DSL是 GET /hotel因此与删除的Java代码流程是类似的。依然是三步走 1创建Request对象。这次是GetIndexRequest对象2准备参数。这里是无参3发送请求。改用exists方法 Test void testExistsHotelIndex() throws IOException {// 1.创建Request对象GetIndexRequest request new GetIndexRequest(hotel);// 2.发送请求boolean exists client.indices().exists(request, RequestOptions.DEFAULT);// 3.输出System.err.println(exists ? 索引库已经存在 : 索引库不存在); }4.4.总结 JavaRestClient操作elasticsearch的流程基本类似。核心是client.indices()方法来获取索引库的操作对象。 索引库操作的基本步骤 初始化RestHighLevelClient创建XxxIndexRequest。XXX是Create、Get、Delete准备DSL Create时需要其它是无参发送请求。调用RestHighLevelClient#indices().xxx()方法xxx是create、exists、delete 5.RestClient操作文档 为了与索引库操作分离我们再次参加一个测试类做两件事情 初始化RestHighLevelClient我们的酒店数据在数据库需要利用IHotelService去查询所以注入这个接口 package cn.itcast.hotel;import cn.itcast.hotel.pojo.Hotel; import cn.itcast.hotel.service.IHotelService; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException; import java.util.List;SpringBootTest public class HotelDocumentTest {Autowiredprivate IHotelService hotelService;private RestHighLevelClient client;BeforeEachvoid setUp() {this.client new RestHighLevelClient(RestClient.builder(HttpHost.create(http://192.168.150.101:9200)));}AfterEachvoid tearDown() throws IOException {this.client.close();} } 5.1.新增文档 我们要将数据库的酒店数据查询出来写入elasticsearch中。 5.1.1.索引库实体类 数据库查询后的结果是一个Hotel类型的对象。结构如下 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; }与我们的索引库结构存在差异 longitude和latitude需要合并为location 因此我们需要定义一个新的类型与索引库结构吻合 package cn.itcast.hotel.pojo;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();} } 5.1.2.语法说明 新增文档的DSL语句如下 POST /{索引库名}/_doc/1 {name: Jack,age: 21 }对应的java代码如图 可以看到与创建索引库类似同样是三步走 1创建Request对象2准备请求参数也就是DSL中的JSON文档3发送请求 变化的地方在于这里直接使用client.xxx()的API不再需要client.indices()了。 5.1.3.完整代码 我们导入酒店数据基本流程一致但是需要考虑几点变化 酒店数据来自于数据库我们需要先查询出来得到hotel对象hotel对象需要转为HotelDoc对象HotelDoc需要序列化为json格式 因此代码整体步骤如下 1根据id查询酒店数据Hotel2将Hotel封装为HotelDoc3将HotelDoc序列化为JSON4创建IndexRequest指定索引库名和id5准备请求参数也就是JSON文档6发送请求 在hotel-demo的HotelDocumentTest测试类中编写单元测试 Test void 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); }5.2.查询文档 5.2.1.语法说明 查询的DSL语句如下 GET /hotel/_doc/{id}非常简单因此代码大概分两步 准备Request对象发送请求 不过查询的目的是得到结果解析为HotelDoc因此难点是结果的解析。完整代码如下 可以看到结果是一个JSON其中文档放在一个_source属性中因此解析就是拿到_source反序列化为Java对象即可。 与之前类似也是三步走 1准备Request对象。这次是查询所以是GetRequest2发送请求得到结果。因为是查询这里调用client.get()方法3解析结果就是对JSON做反序列化 5.2.2.完整代码 在hotel-demo的HotelDocumentTest测试类中编写单元测试 Test void testGetDocumentById() throws IOException {// 1.准备RequestGetRequest request new GetRequest(hotel, 61082);// 2.发送请求得到响应GetResponse response client.get(request, RequestOptions.DEFAULT);// 3.解析响应结果String json response.getSourceAsString();HotelDoc hotelDoc JSON.parseObject(json, HotelDoc.class);System.out.println(hotelDoc); }5.3.删除文档 删除的DSL为是这样的 DELETE /hotel/_doc/{id}与查询相比仅仅是请求方式从DELETE变成GET可以想象Java代码应该依然是三步走 1准备Request对象因为是删除这次是DeleteRequest对象。要指定索引库名和id2准备参数无参3发送请求。因为是删除所以是client.delete()方法 在hotel-demo的HotelDocumentTest测试类中编写单元测试 Test void testDeleteDocument() throws IOException {// 1.准备RequestDeleteRequest request new DeleteRequest(hotel, 61083);// 2.发送请求client.delete(request, RequestOptions.DEFAULT); }5.4.修改文档 5.4.1.语法说明 修改我们讲过两种方式 全量修改本质是先根据id删除再新增增量修改修改文档中的指定字段值 在RestClient的API中全量修改与新增的API完全一致判断依据是ID 如果新增时ID已经存在则修改如果新增时ID不存在则新增 这里不再赘述我们主要关注增量修改。 代码示例如图 与之前类似也是三步走 1准备Request对象。这次是修改所以是UpdateRequest2准备参数。也就是JSON文档里面包含要修改的字段3更新文档。这里调用client.update()方法 5.4.2.完整代码 在hotel-demo的HotelDocumentTest测试类中编写单元测试 Test void testUpdateDocument() throws IOException {// 1.准备RequestUpdateRequest request new UpdateRequest(hotel, 61083);// 2.准备请求参数request.doc(price, 952,starName, 四钻);// 3.发送请求client.update(request, RequestOptions.DEFAULT); }5.5.批量导入文档 案例需求利用BulkRequest批量将数据库数据导入到索引库中。 步骤如下 利用mybatis-plus查询酒店数据 将查询到的酒店数据Hotel转换为文档类型数据HotelDoc 利用JavaRestClient中的BulkRequest批处理实现批量新增文档 5.5.1.语法说明 批量处理BulkRequest其本质就是将多个普通的CRUD请求组合在一起发送。 其中提供了一个add方法用来添加其他请求 能添加的请求包括 IndexRequest也就是新增UpdateRequest也就是修改DeleteRequest也就是删除 因此Bulk中添加了多个IndexRequest就是批量新增功能了。示例 其实还是三步走 1创建Request对象。这里是BulkRequest2准备参数。批处理的参数就是其它Request对象这里就是多个IndexRequest3发起请求。这里是批处理调用的方法为client.bulk()方法 我们在导入酒店数据时将上述代码改造成for循环处理即可。 5.5.2.完整代码 在hotel-demo的HotelDocumentTest测试类中编写单元测试 Test void testBulkRequest() throws IOException {// 批量查询酒店数据ListHotel 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); }5.6.小结 文档操作的基本步骤 初始化RestHighLevelClient创建XxxRequest。XXX是Index、Get、Update、Delete、Bulk准备参数Index、Update、Bulk时需要发送请求。调用RestHighLevelClient#.xxx()方法xxx是index、get、update、delete、bulk解析结果Get时需要 数据库数据导入到索引库中。 步骤如下 利用mybatis-plus查询酒店数据 将查询到的酒店数据Hotel转换为文档类型数据HotelDoc 利用JavaRestClient中的BulkRequest批处理实现批量新增文档 5.5.1.语法说明 批量处理BulkRequest其本质就是将多个普通的CRUD请求组合在一起发送。 其中提供了一个add方法用来添加其他请求 [外链图片转存中…(img-i7SCmriW-1699967687866)] 可以看到能添加的请求包括 IndexRequest也就是新增UpdateRequest也就是修改DeleteRequest也就是删除 因此Bulk中添加了多个IndexRequest就是批量新增功能了。示例 [外链图片转存中…(img-LMiezCAQ-1699967687866)] 其实还是三步走 1创建Request对象。这里是BulkRequest2准备参数。批处理的参数就是其它Request对象这里就是多个IndexRequest3发起请求。这里是批处理调用的方法为client.bulk()方法 我们在导入酒店数据时将上述代码改造成for循环处理即可。 5.5.2.完整代码 在hotel-demo的HotelDocumentTest测试类中编写单元测试 Test void testBulkRequest() throws IOException {// 批量查询酒店数据ListHotel 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); }5.6.小结 文档操作的基本步骤 初始化RestHighLevelClient创建XxxRequest。XXX是Index、Get、Update、Delete、Bulk准备参数Index、Update、Bulk时需要发送请求。调用RestHighLevelClient#.xxx()方法xxx是index、get、update、delete、bulk解析结果Get时需要

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

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

相关文章

外贸展示企业网站网站建设公司itcask

最近做了一个对接华为云视频会议接口,订阅华为云会议事件消息的功能。做之前在网上搜索了一番,居然发现没有一个这方面的资料。决定整理一下分享出来,留给有缘人 具体的需求是,我们的app上集成了华为云会议sdk,在用户开…

新业务在线软件下载湘潭整站优化

如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径我有一个包含2个包的项目:ListStopWords.txtListStopWords.txt在包(2)中我有一个文本文件ListStopWords.txt,在包(1)中我有一个类FileLoadder.这是代码FileLoader&#xff…

太仓有没有做网站建设的怎么拥有网站的所有权

编号:0266 座位号 2018~2019学年度第一学期期末考试 设计构成试题 2019年1月 一、设计制作题(100分) 题目:自由形插接构造的留声机博物馆。 要求:以自由形插接构造的方式,设计一个留声机博物馆…

太原网站建设维护网页文件模板下载

【成长点滴】对SMART原则的一些粗浅理解 以下解释来自百度百科 “所谓SMART原则,即是: S:(Specific) 目标要清晰、明确,让考核者与被考核者能够准确的理解目标;M:(Measurable) 目标要量化,考核时…

东莞公司网站做优化app下载安卓软件

目前是使用C嵌入式的python函数 python函数是阻塞式的接收服务器消息 直到退出监听才会有返回值 监听中收到消息会调用python的一个回调函数,可以获取到收到的消息 所以要怎么样来返回消息给C EDIT: 代码如下callback打印可以打印正确数据,问题是 这里用…

昆明网站建设时间云南建设投资集团网站

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📚 前言 📘 创建 Pinia 📘 Option Store 📘 Pinia 提供多种选项配…

成都网站建设网站建设哪家好网页设计图片和文字怎么在一排

来源:机器之心编辑:杜伟、陈萍将芯片的布局规划看作一个深度强化学习问题,谷歌大脑团队希望用 AI 来提升芯片设计效率。基于 AI 的最新设计方案可以在数小时内完成人类设计师耗费数月才能完成的芯片布局,这将有可能引领一场新的芯…

到哪查找网站域名夹江移动网站建设

题目截图 题目翻译 题目分析 正难则反,考虑所有不符合的例子 由于n很小,所以可以状态压缩二进制遍历完全部不符合例子的组合 对于不符合的例子,假设其中第i个不符合,那么就消耗掉fi 1个球 以此类推,减剩下s2个球 这时…

江苏建设监理网站网页源码在线查看工具

文章目录 一、localhost是什么?二、localhost 在平时用到的地方三、 localhost 与 127.0.01 一、localhost是什么? localhost 是一个特殊的主机名,通常指代本机。它被用来进行本地开发和测试,也常被用作网络配置中的占位符&#…

如何做网站推广自己产品有哪些网站是html5的

一、内存管理 分页存储管理,是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把内存空间分成与页面相同大小的若干个存储块&#xf…

代理网站是什么公司网页设计项目简历

共同点:都是用来表示Spring某个类的是否可以接收HTTP请求 不同点: controller表示的是一般是页面处理 restcontroller则是json字符串常用的法则

衡水做网站的公司网络服务器忙

app engine在本教程的第一部分中, 我介绍了如何使用OAuth进行Google API服务的访问/身份验证。 不幸的是,正如我稍后发现的那样,我使用的方法是OAuth 1.0,显然现在Google正式弃用了OAuth 1.0,改用OAuth 2.0版本。 显然…

利用网盘 建网站百度推广图片尺寸要求

线程组:使用复杂场景的性能测试 有时候我们做性能测试时,只依靠自带的线程组,显示满足不了性能测试中比较复杂的场景,下面这两种线程组可以帮助你很好的完成复杂的场景 第一种:Stepping Thread Group 在取样器错误后…

手机网站安装长春百度关键词搜索

父控件 使用子控件时&#xff0c;为了能让子控件 在控件上面使用灵活多变&#xff0c;这里使用插槽。 简单插槽使用 <script>// 创建 vue实例const app Vue.createApp({ data() { return {text: 提交 } },// slot 插槽// slot 中使用的数据&#xff0c;作用域的问题&…

网站网页设计招聘网站logo是什么

一直觉得中央空调是高颜值神器但是对于我这种万年单身狗在考虑开启率的情况下好像还是风管机和挂机比较实用但是又嫌弃挂机的电线冷凝水管丑到不行直到我看到了-----管线背出的挂机仿佛开启了新世界的大门| 怎么做到的 |我问了好多卖中央空调的有没有管线背出的挂机都和我说不清…

东莞网站建设什么价格便宜公司招聘网站续费申请

1.CNN中池化的作用 池化层的作用是对感受野内的特征进行选择&#xff0c;提取区域内最具代表性的特征&#xff0c;能够有效地减少输出特征数量&#xff0c;进而减少模型参数量。按操作类型通常分为最大池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling)&a…

北京公司网站建设买完域名接下来怎么弄

【问题描述】&#xff1a;Jenkins中明明配置了邮箱发送时要带压缩附件&#xff0c;收到的邮箱中却没有附件内容 【问题定位】&#xff1a;压缩附件没有放在Jenkins工作空间下&#xff0c;所以发送的邮件并未发送附件 【解决办法】&#xff1a; 1&#xff09;把压缩附件放到J…

搬家网站模板营销融合app

记录一下自己看过的视频 专利书写指南_哔哩哔哩_bilibili 纯干货&#xff01;人工智能算法类发明专利撰写规范教程&#xff0c;中国地质大学教授一小时精讲发明专利撰写规范&#xff0c;究极通俗易懂&#xff01;_哔哩哔哩_bilibili 记录自己如何让学习写专利&#xff1a; …

竞价网站转化率为多少网站中文商标域名注册

小编为大家整理了计算机数据结构词汇中英对照&#xff0c;希望对你有帮助哦!计算机数据结构词汇中英对照&#xff1a;栈 stack队列 queue串 string数组 array树 tree图 grabh查找&#xff0c;线索 searching更新 updating排序(分类) sorting插入 insertion数据抽象 data abstra…

网站地链接结构户型图装修设计图app

在编程的世界里&#xff0c;Git 就像水一样常见&#xff0c;以至于我们认为它是创建和管理代码更改的唯一可行的工具。 前 Facebook 员工&#xff0c;2024 年 首先&#xff0c;我为什么关心&#xff1f; 我致力于构建 Graphite&#xff0c;它从根本上受到 Facebook 内部工具的…