【SpringCloud——Elasticsearch(上)】

一、什么是Elasticsearch

        elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。

 二、倒排索引

1、正向索引

2、倒排索引

 3、总结

 三、ES和MySQL的区别

 

四、操作索引库

1、基于Kibana(WEB界面)

以下操作均根据以上数据库表进行:

 ①、创建索引库

#创建索引库
PUT /music
{"mappings": {"properties": {"title":{"type": "text","analyzer": "ik_smart"},"singer":{"type": "object","properties": {"firstname":{"type":"keyword"},"lastname":{"type":"keyword"}}},"time":{"type": "date","index": false},"url":{"type": "keyword","index": false},"userid":{"type": "text","index": false}}}
}

②、查看索引库

#获取索引库
GET /music

③、修改索引库

索引库和mapping一旦创建则无法修改,但是可以添加新的字段。

#为索引库添加字段(仅支持新增字段,不支持修改字段)
PUT /music/_mapping
{"properties":{"id":{"type":"integer","index":false}}
}

④、删除索引库

#删除索引库
DELETE /music

2、基于RestClient(代码)

1.Java项目导入es的RestHighLevelClient依赖:

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

2.因为SpringBoot默认的ES版本为7.6.2,所以我们需要覆盖默认的ES版本:

    <properties><java.version>1.8</java.version><elasticsearch.version>7.12.1</elasticsearch.version></properties>

3.初始化RestHighLevelClient(单元测试中执行)

    private RestHighLevelClient client;@BeforeEachvoid setClient(){this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://XXXX:9200")));}@AfterEachvoid tearDown() throws Exception{this.client.close();}
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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 以下操作均根据以上数据库表进行:

①、编写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"},"star_name":{"type": "keyword"},"bussiness":{"type": "keyword","copy_to": "all"},"location":{"type": "geo_point"},"pic":{"type": "keyword","index": false},"all":{"type": "text","analyzer": "ik_max_word"}}}
}

 copy_to属性的作用:支持多条件搜索查询

 ②、创建索引库

    //索引库创建@Testvoid createHotelIndex() throws IOException {//1.创建Request对象CreateIndexRequest request = new CreateIndexRequest("hotel");//2.准备请求的参数,DSL语句//MAPPING_TEMPLATE 就是我们编写的mapping映射中的DSLrequest.source(MAPPING_TEMPLATE, XContentType.JSON);//3.发送请求client.indices().create(request, RequestOptions.DEFAULT);}

②、删除索引库

    //删除索引库@Testvoid deleteHotelIndex() throws IOException {DeleteIndexRequest request = new DeleteIndexRequest("hotel");client.indices().delete(request,RequestOptions.DEFAULT);}

③、查看索引库是否存在

    //判断索引库是否存在@Testvoid testExistHotelIndex() throws IOException {GetIndexRequest request = new GetIndexRequest("hotel");boolean ret = client.indices().exists(request,RequestOptions.DEFAULT);System.err.println(ret);}

五、操作文档

1、基于Kibana(WEB界面)

※参考四当中基于Kibana生成的索引库进行以下文档操作:

①、插入文档

#插入文档(新增数据)
POST /music/_doc/1
{"id":1,"title":"爱在西元前","singer":{"firstname":"周","lastname":"杰伦"},"time":"2022-01-01T12:00:00.000Z","url":"/music/get?path=茜茜 - 爱在西元前","userid":"1966998940"
}

②、获取文档

#查询文档
GET /music/_doc/1

③、修改文档

方式一:全量修改,会删除旧文档,添加新文档(如果旧文档不存在则创建

PUT /music/_doc/1
{"id":1,"title":"爱在西元前","singer":{"firstname":"周杰伦","lastname":"Jay"},"time":"2022-01-01T12:00:00.000Z","url":"/music/get?path=茜茜 - 爱在西元前","userid":"1966998940"
}

方式二:局部修改,只修改指定字段

POST /music/_update/1
{"doc": {"title":"爱不在西元前"}
}

④、删除文档

#删除文档
DELETE /music/_doc/1

2、基于RestClient(代码)

※参考四当中基于RestClient生成的索引库及其数据库数据进行以下文档操作:

①、新增数据库数据到索引库

    //添加数据到索引库@Testvoid addDataToHotelIndex() throws IOException {//根据id查询酒店数据Hotel hotel = hotelService.getById(61083L);//转换为Doc文档类型HotelDoc doc = new HotelDoc(hotel);//1.准备request对象IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());//2.准备Json文档request.source(JSON.toJSONString(doc), XContentType.JSON);//3.发送请求client.index(request, RequestOptions.DEFAULT);}

 HotelDoc实体类:

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

②、根据ID查询索引库数据

    //根据id查询酒店数据@Testvoid queryDataFromHotelIndex() throws IOException {//1.创建request对象GetRequest 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 deleteDocument() throws IOException {//1.准备RequestDeleteRequest request = new DeleteRequest("hotel","61083");//2.发送请求client.delete(request,RequestOptions.DEFAULT);}

④、修改酒店数据

    //修改文档数据@Testvoid updateDocument() throws IOException {//1.准备RequestUpdateRequest request = new UpdateRequest("hotel","61083");//2.准备请求参数request.doc("brand","皇冠假日酒店","starName","四星");//3.发送请求client.update(request,RequestOptions.DEFAULT);}

⑤、批量导入数据库数据到索引库

    //批量新增文档数据@Testvoid testBulkRequest() throws IOException {//1.创建RequestBulkRequest request = new BulkRequest();//2.准备Json文档//批量查询酒店数据List<Hotel> list =  hotelService.list();for (int i = 0; i < list.size(); i++) {HotelDoc hotelDoc = new HotelDoc(list.get(i));request.add(new IndexRequest("hotel").id(hotelDoc.getId().toString()).source(JSON.toJSONString(hotelDoc),XContentType.JSON));}//3.发送请求client.bulk(request,RequestOptions.DEFAULT);}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第五十七天 | 回文

647. 回文子串 文档讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;动态规划&#xff0c;字符串性质决定了DP数组的定义 | LeetCode&#xff1a;647.回文子串_哔哩哔哩_bilibili 状态&#xff1a;不会做。 思路 确定dp数组&#xff08;dp table&#xf…

驱动LSM6DS3TR-C实现高效运动检测与数据采集(3)----获取ID

概述 一旦传感器被正确初始化&#xff0c;可以通过SPI或I2C接口向传感器发送读取命令&#xff0c;并接收传感器返回的数据。这个读取过程包括获取LSM6DS3TR传感器提供的加速度计和陀螺仪数据&#xff0c;以及传感器对应的温度信息。 获取数据状态 STATUS_REG (1Eh)是该传感器…

chatgpt赋能python:Python中构造方法的介绍与应用

Python中构造方法的介绍与应用 在Python编程语言中&#xff0c;构造方法通常是类中的一个特殊方法&#xff0c;用于在对象创建时初始化其属性。构造方法使用__init__关键字来定义&#xff0c;而且通常会包含self参数&#xff0c;用于引用创建的新对象。在本文中&#xff0c;我…

木工专用计算机,木工做多功能电脑台带书柜架一体图片 自己打造电脑桌用实木还是生态木颗粒板...

黑色十字条纹状的书架&#xff0c;给人带来一种与众不同的感觉&#xff0c;褐色的实木地板铺贴在地面上&#xff0c;褐色的地面与整个橱柜形成了鲜明的对比。褐色给人一种灰溜溜的感觉&#xff0c;但是这种颜色很有古典美&#xff0c;而且褐色的地面又特别的耐脏&#xff0c;这…

python爬虫大众点评字体反爬

字形相同的字体反爬问题解析 问题所在&#xff1a;部分数据加载时使用网站自定义的字体&#xff0c;浏览器访问网页时字体文件会加载到浏览器中&#xff0c;爬虫访问时没有对应的自定义字体&#xff0c;所以就得不到那部分数据&#xff0c;如图1&#xff0c;加密的这部分数据在…

五笔字根语法口决

一、字根助记词 11G   王旁青头戋五一 12F   土士二干十寸雨 13D   大犬三&#xff08;羊&#xff09;古石厂 (“羊”指羊字底) 14S   木丁西 15A   工戈草头右框七   (“右框”即“匚”) 21H   目具上止卜虎皮   (“具”指具字的上部) 22J   日早…

字体反爬案例解析:大众点评

文章目录 字体反爬简介发送请求&#xff0c;获取网页源码提取字体信息&#xff0c;并将字体文件下载到本地建立基准字典引例提取需要字体反爬处理的信息提取不需要字体反爬的信息整理提取到的所有信息&#xff0c;并存入excel 字体反爬简介 什么是字体反爬&#xff1f; …

作文 我眼中的计算机1000字,我眼中的自己作文范文1000字(精选6篇)

我眼中的自己作文范文1000字(精选6篇) 在日常生活或是工作学习中&#xff0c;许多人都有过写作文的经历&#xff0c;对作文都不陌生吧&#xff0c;作文根据写作时限的不同可以分为限时作文和非限时作文。还是对作文一筹莫展吗&#xff1f;以下是小编为大家整理的我眼中的自己作…

基于深度学习的高精度家禽猪检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度家禽猪检测识别系统可用于日常生活中或野外来检测与定位家禽猪目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的家禽猪目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检…

智能管理PoE交换机

在这个万物互联的时代&#xff0c;数据与数据之间的相互传输交流&#xff0c;显得尤为重要。那么要怎样才能使计算机与传统的物联设备相连接呢&#xff1f;这时&#xff0c;串口服务器这一媒介的作用就凸显出来了。那么&#xff0c;你知道什么是串口服务器吗&#xff1f;串口服…

chatgpt赋能python:Python中构造函数的名称

Python中构造函数的名称 作为一名有10年Python编程经验的工程师&#xff0c;我深知Python语言中构造函数的重要性。在本文中&#xff0c;我将着重介绍Python中构造函数的名称&#xff0c;并阐述其在Python编程中的作用。 什么是构造函数&#xff1f; 构造函数是一种特殊类型…

C++ stack容器介绍

&#x1f914;stack容器介绍&#xff1a; &#x1f4d6; stack是一种数据结构&#xff0c;也可以被称为堆栈。它是一个容器&#xff0c;只允许在最顶层进行插入和删除&#xff0c;并且只能访问最后一个插入的元素。这个元素称为栈顶。所有新插入的元素都被放置在栈顶上面&#…

Mysql source命令报错

Mysql source命令报错 情况一&#xff1a;目录包含中文 放到没有中文的路径再执行 情况二&#xff1a;不小心加了分号 mysql会将分号当做文件名的一部分 固然报错 情况三&#xff1a;没有选择数据库 使用 use加数据库名 选择数据库后再执行 执行成功画面

Linux中的source命令

Linux中的source命令 1、source命令是什么&#xff1f; source命令也称为“点命令”&#xff0c;也就是一个点符号&#xff08;.&#xff09;&#xff0c;是bash的内部命令。 注意&#xff1a;该命令通常用命令“.”来替代 2、source命令 功能&#xff08;能干什么&#xff0…

qsort函数排序举例

使用qsort函数快速排序应用举例 这篇博客是用qsort函数来快速排列float型数据&#xff0c;分别按照年龄&#xff08;int型&#xff09;、姓名&#xff08;char型&#xff09;排列结构体。看懂就看懂&#xff0c;看不懂我也不想解释了。 简略解释一下qsort函数&#xff1a; v…

C语言qsort函数详解

目录 一、qsort函数的使用 二、qsort函数的模拟 一、qsort函数的使用 快排函数qsort是C的库函数&#xff0c;它可以对输入的任何类型的数组排序&#xff0c;通过该函数的函数声明我们可以看出它的使用方法&#xff1a; 举个栗子&#xff1a; #include<stdio.h> #inclu…

C语言 - qsort函数详解

文章目录 一.qsort函数简介1.qsort函数是C标准库<stdlib.h>库中的函数&#xff0c;使用时引入#include <stdlib.h>。**2.它的函数原型是 void qsort(void* base, size_t num, size_t width, int (*compare)(const void*, const void*))3.这些参数都是什么意思&…

qsort函数详解

上篇文章&#xff0c;笔者讲解了冒泡排序的方法&#xff0c;原文链接为&#xff1a;一个典列来带领大家了解冒泡排序思想_念君思宁的博客-CSDN博客&#xff0c;有意者请参考一下&#xff01; 最近笔者又浅学关于qsort函数的排序方法&#xff01;下面且听笔者一一道来&#xff…

C语言函数——qsort函数的使用

目录 一、qsort函数&#xff1a; 1、定义&#xff1a; 2、参数&#xff1a; &#xff08;1&#xff09;.基础 &#xff08;2&#xff09;.数字 &#xff08;3&#xff09;.大小 &#xff08;4&#xff09;.比较 二、总代码&#xff1a; 1、整型比较&#xff1a; 2、浮…

利用qsort函数快速排序

一.qsort函数的类型及参数 void qsort(void *base,size_t num,size_t width,int (*compare)(const void* elem1),const void* elem2)1.第一个参数base&#xff1a;待排序数组的首元素的地址&#xff0c;数据类型为void*。 2.第二个参数 num&#xff1a;待排序数组的元素个数&…