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

Elasticsearch学习(一)

ElasticSearch学习(一)

1 什么是Elasticsearch

1.什么是搜索?

百度:我们比如说想找寻任何信息时候就会上百度上搜索一下

比如说:电影、图片、小说等等…(提到搜索的第一印象)

百度 != 搜索

百度是公共的搜索引擎

垂直搜索(站内搜索)

互联网的搜索:电商网站、招聘网站、新闻网站、各种app

IT系统的搜索:OA软件、办公自动化软件、会议管理、日程管理、项目管理、员工管理、搜索"张三",“张三儿”…等等

​ 后台管理系统

搜索,就是在任何场景下找寻你想要的信息,这个时候会输入你搜索的关键字然后找到这个关键字相关的有些信息

2.如果用数据库做搜索会怎么样?

做软件开发都知道数据都是存储在数据库里面的,比如说电商网站的网站信息,招聘网站的职位信息,新闻网站的新闻信息

等等,所以说的自然一点如果从技术的角度来考虑如果实现电商网站内部的搜索功能的话就可以考虑去使用数据库进行搜索。

商品id商品名称商品描述商品图片商品卖家
1高露洁牙膏
2中华牙膏
3佳洁士牙膏

这个时候我们的电商系统:

select * from products where product_name like “%牙膏%”

会去做全表扫描

缺点:

1.比方说:每条记录的指定字段的文本可能会很长比如说商品描述的字段很长,这个时候我们对每条记录的所有文本进行扫描

来判断说你包不包含我的指定词

2.比如说我们有一个叫牙刷膏,就会搜索不到牙膏这个term(还不能将搜索词拆分开去尽可能搜索符合你期望的结果 )

用数据库来实现搜索不太靠谱且性能较差

3.什么是全文检索和Lucene?

全文检索,倒排索引

举个例子下面有四个词条

生化危机电影 1

生化危机海报 2

生化危机文章 3

生化危机新闻 4

我们的倒排索引是下面这样的

关键词ids
生化1,2,3,4
危机1,2,3,4
电影1
海报2
文章3
新闻4

我们的数据库里面的数据一共有100万条,按照之前的思路其实就要扫描100万次,并且每次扫描都要匹配那个文本的字符,确认是否包含搜索的关键词,而且还不能将搜索词拆解开来进行检索。

利用倒排索引进行所搜的话,假设100万条数据,拆分出来的词语,假设有1000万个词语,那么在倒排索引中,就有1000万行,我们可能不需要搜索1000万次,很有可能说在搜索到第一次的时候。我们就可以找到这个搜索词对应的数据,也可能是第100次或者第1000次。

上述过程就叫做全文检索

Lucene 就是一个jar包,里面封装好了各种建立倒排索引,以及进行搜索的代码,包括各种算法,我们就用java开发的时候引入lucene jar,然后基于lucene的api进行开发就行。用lucene我们就可以去将已有的数据进行建立索引,lucene会在本地磁盘上面给我们组织索引的数据结构。另外的话,我们也可以用lucene提供的一些功能和api来针对磁盘上的索引数据,进行搜索。

4.什么是Elasticsearch?

我们的lucene封装了搜索引擎的功能

但是部署在单台机器上,假设我们磁盘就500个G的空间

但是如果我们的数据量很大有1个T的数据,那这个时候在一台机器上是放不下的

这个时候有多台机器(分布式),那我们要搜索的话是不是就需要去多台机器来进行通信,这不是就很麻烦吗

而且我们建立索引放在哪一台服务器上,我们的搜索内容放在哪一台呢?

我们还要保证系统的数据不丢失,系统的高可用呢?

加入索引或者数据的服务器一宕机马上就寄啦

我们这不麻烦死了

这个时候我们的Elasticsearch就孕育而生了

我们的只需要发送请求给我们的es集群

我们就会收到我们es集群的响应,就能得到搜索内容

我们的es会底层进行性能优化保证我们的性能最高,基于我们分布式的特性还封装了一些我们lucene所做不到的事情

1.自动维护数据的分布到多个节点的索引的建立,还有搜索请求分布到多个节点的执行

2.自动维护数据的冗余副本,保证说一些机器宕机了我们不会丢失任何的数据

3.封装了更多的高级功能,以给我们提供更多高级的支持,让我们快速的开发应用,开放更加复杂的应用:

复杂的搜索功能,聚合分析的功能,基于地理位置的搜索(距离我当前位置1km以内的xxxx)

这个就是我们的Elasticsearch

2.Elasticsearch的功能,干什么的

1.Elasticsearch的功能

(1)分布式的搜索引擎和数据分析引擎

搜索:百度,网站的站内搜索,IT系统的检索

数据分析:电商网站,最近7天牙膏这种商品销量排名前10的商家有哪些;新闻网站,最近一个月访问量排名前3的

新闻板块有哪些

分布式,搜索,数据分析

(2)全文检索,结构化检索,数据分析

全文检索:我想搜索商品名称含有牙膏的商品,select * from products where product_name like “%牙膏%”

结构化搜索:我想搜索商品分类为日化用品的商品都有哪些,select * from products where category_id = ‘日化用品’

部分匹配、自动完成、搜索纠错、搜索推荐

数据分析:我们分析每一个商品分类下有多少个商品,select category_id,count(*) from products group by category_id

(3)对海量数据进行近实时的处理

分布式:ES自动将海量数据分散到多台服务器上存储和检索

海联数据的处理:分布式以后,就可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理了

近实时:检索个数据要花费1小时(这就不是近实时了,而是离线批处理);在秒级别对数据进行搜索和分析

跟分布式相反的lucene,单机应用,只能在单台服务器上使用,只能处理有限的数据量

2.Elasticsearch的适用场景

国外

(1)维基百科,类似于百度百科,全文检索、高亮、搜索推荐

(2)The Guardian(国外新闻网站),类似搜狐新闻,用户行为日志(点击、浏览、收藏、评论)+社交网络数据,数据分析,给到每篇新闻的作者让其

知道自己的文章反馈

(3)Stack Overflow(国外程序异常讨论论坛),IT错误,程序报错提交有人会和你讨论和回答,全文检索,搜索相关问题和答案

(4)GitHub(开源代码管理),搜索上千亿行代码

(5)电商网站检索商品

(6)日志数据分析,logstash采集日志,ES进行复炸数据分析(ELK技术)

(7)商品架构监控网站,用户设定某商品阈值,当低于阈值会进行发送消息提醒

(8)BI系统,辅助商业决策报表,ES执行数据分析与挖掘,Kibana进行数据可视化

国内

站内搜索(电商、招聘等等),IT系统搜索(OA,CRM,ERP,等等),数据分析(ES热门的一个使用场景)

3.Elasticsearch的特点

(1)可以作为一个大型分布式集群技术,处理PB级数据,服务大小公司

(2)Elasticsearch不是什么新技术,主要是全文检索,数据分析以及分布式技术合并在一起才形成了独一无二的ES

(3)对用户开箱即用

(4)数据库的功能面对很多领域是不够用的,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理,ES作为传统数据库的一个补充

提供了数据库所不能提供的很多功能

3.剖析Elasticsearch核心概念

1.lucene和elasticsearch的前世今生

lucene,最先进功能最强大的搜索库,直接基于lucene开发,非常复杂,阿皮、复杂,需要深入理解原理(各种索引结构)

elasticsearch,基于lucene,隐藏复杂性,提供简单易用的restful api接口,java api接口(以及其他语言)

(1)分布式的文档存储引擎

(2)分布式的搜索引擎和分析引擎

(3)分布式,支持PB级数据

开箱即用,优秀的默认参数,不需要任何其他额外设置,完全开源

2.elasticsearch的核心概念

1.Near Realtime

NRT近实时,两个意思,从写入到数据可以被搜索到有一个小延迟,基于es执行搜索和分析可以达到秒级

当这个延迟是ms级才可以算是实时

2.Cluster

集群,包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称)来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常

3.Node

集群中的一个节点,节点也是有名称的并且十分重要,默认节点会加入到名为”elasticsearch“的集群,如果直接启动一堆节点,那么它们会自动组成一个elasticsearch集群,当然一个节点也可以组成一个es集群

4.Document

文档,es中最小的数据单元,一个document可以是一条客户数据,一条商品分类数据,一条订单数据,通常用json表示,每个idnex下的type中可以存多个document

5.Index

索引,包含一堆有相似结构的文档数据,比如可以有一个客户索引,商品分类索引,订单索引,索引有一个名称

6.Type

类型,每个索引里面可以有一个或多个type,type是index中的一个逻辑分类,一个type下的document,都有相同的field,比如博客系统,有一个索引,可以定义用户数据type,博客数据type,评论数据type

例子:商品index,里面存放了所有的商品数据,商品document

但是商品分很多种类,每个种类的document的field可能不太一样,可能有的还包含一些特殊的filed例如生鲜保鲜期之类的

type,日化商品type,电器商品type,生鲜商品type

日化商品type:product_id,product_name,product_desc,category_id,category_name

电器商品type:product_id,product_name,product_desc,category_id,category_name,service_period

生鲜商品type:product_id,product_name,product_desc,category_id,category_name,eat_period

每一个type里面,都会包含一推document

7.shard

单台机器无法存储大量数据,es可以将一个index 中的数据切分为多个shard,分布在多台服务器上存储,有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多个服务器上执行,提升吞吐量和性能,每个shard都是一个lucene index

8.replica

任何一个服务器随时可能故障或者宕机,此时shard可能会丢失,因此可以为每个shard创建多个replica副本,repliac可以在shard故障时提供备用服务保障数据不丢失,多个replica还可以提升搜索操作的吞吐量和性能。primary shard(建立索引时第一次设置,不能修改,默认5个),replica shard(随时修改,默认1个),默认每个索引10个shard,5个primary shard,5个replica shard,最小的高可用配置是两台服务器

注意: shard(primary shard),replica(replica shard)是一样的都是shard,只是简称

优点:

1.如果存放日化商品的shard的节点宕机,这个时候没关系我们还有replica,在另一个节点,可以直接继续搜索,请求会打到replica节点上去,数据不会丢很爽

2.提升了搜索这类请求的吞吐量和性能,例如我们的日化商品的shard搜索的qps已经打满了,我们可以继续去请求我们的replica的shard来提高吞吐量和性能

3.elasticsearch核心概念vs数据库核心概念

Elasticsearch 数据库


Document 行

Type 表

Index 数据库

4.在windows上安装和启动Elasticsearch

1.安装JDK,说是1.8.0_73以上但我1.8.0_321上了

2.下载解压

3.去bin里面的elasticseach.bat启动

4.检查localhost:9200

{"name": "JmSo6tA","cluster_name": "elasticsearch","cluster_uuid": "tiiuyMTWSvKA9kvRx9XNNA","version": {"number": "5.2.0","build_hash": "24e05b9","build_date": "2017-01-24T19:52:35.800Z","build_snapshot": false,"lucene_version": "6.4.0"},"tagline": "You Know, for Search"
}
我相信你看得懂

5.修改集群名称:elasticsearch.yml

6.下载和解压Kinana安装包,使用里面的开发界面操作elasticsearch,作为我们学习es知识点的主要的界面入口

7.启动Kinaba,bin\kibana.bat

8.进入Dev Tools界面

相关文章:

Elasticsearch学习(一)

ElasticSearch学习(一) 1 什么是Elasticsearch 1.什么是搜索? 百度:我们比如说想找寻任何信息时候就会上百度上搜索一下 比如说:电影、图片、小说等等…(提到搜索的第一印象) 百度 &#x…...

CSS3的常见边框汇总

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS3 边框</title><style>body, ul, li, dl, dt, dd, h1, h2, h3, h4, h5 {margin: 0;padding: 0;}body {background-color: #F7F7F7;}.wr…...

酷柚易汛ERP-购货订单操作指南

1、应用场景 先下购货订单&#xff0c;收货入库后生成购货单。 2、主要操作 2.1 新增购货订单 打开【购货】-【购货订单】新增购货订单。&#xff08;*为必填项&#xff0c;其他为选填&#xff09; ① 录入供应商&#xff1a;点击供应商字段框的 &#xff0c;在弹框中选择供…...

【数据仓库】数仓分层方法详解与层次调用规范

文章目录 一. 数仓分层的意义1. 清晰数据结构。2. 减少重复开发3. 方便数据血缘追踪4. 把复杂问题简单化5. 屏蔽原始数据的异常6. 数据仓库的可维护性 二. 如何进行数仓分层&#xff1f;1. ODS层2. DW层2.1. DW层分类2.2. DWD层2.3. DWS 3. ADS层 4、层次调用规范 一. 数仓分层…...

记一次线上问题引发的对 Mysql 锁机制分析

背景 最近双十一开门红期间组内出现了一次因 Mysql 死锁导致的线上问题&#xff0c;当时从监控可以看到数据库活跃连接数飙升&#xff0c;导致应用层数据库连接池被打满&#xff0c;后续所有请求都因获取不到连接而失败 整体业务代码精简逻辑如下&#xff1a; Transaction p…...

Android 工厂模式距离传感器逻辑优化

Android 工厂模式距离传感器逻辑优化 接到客户反馈提到距离传感器校准完毕之后&#xff0c;每次测试完成界面都会弹出“请点击校准按钮进行校准&#xff01;”Toast弹窗&#xff0c;需要对弹窗的显示逻辑进行优化&#xff0c;即只让其在首次进入距离传感器测试界面时弹出&#…...

Dell笔记本电脑 启动时提示解决

https://www.dell.com/support/kbdoc/en-us/000139731/what-the-headless-operation-mode-active-post-message-means-and-how-to-stop-it-appearing-during-start-up dell官方解释&#xff1a; 提示来自于BIOS/UEFI固件中POST Behaviar&#xff0c;只要打开了忽略警告、错误…...

【人工智能Ⅰ】7-KNN 决策树

【人工智能Ⅰ】7-KNN & 决策树 7-1 KNN&#xff08;K near neighbour&#xff09; 思想&#xff1a;一个样本与数据集中的k个样本最相似&#xff0c;若这k个样本大多数属于某类别&#xff0c;则该个样本也属于这类别 距离度量 样本相似性用欧氏距离定义 L p ( x i , x…...

【LeetCode】26. 删除有序数组中的重复项

26. 删除有序数组中的重复项 难度&#xff1a;简单 题目 给你一个 非严格递增排列 的数组 nums &#xff0c;请你原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素…...

K8S知识点(八)

&#xff08;1&#xff09;实战入门-Label 通过标签实现Pod的区分&#xff0c;说白了就是一种标签选择机制 可以使用命令是否加了标签&#xff1a; 打标签&#xff1a; 更新标签&#xff1a; 筛选标签&#xff1a; 修改配置文件&#xff0c;重新创建一个pod 筛选&#xff1…...

25.4 MySQL 函数

1. 函数的介绍 1.1 函数简介 在编程中, 函数是一种组织代码的方式, 用于执行特定任务. 它是一段可以被重复使用的代码块, 通常接受一些输入(参数)然后返回一个输出. 函数可以帮助开发者将大型程序分解为更小的, 更易于管理的部分, 提高代码的可读性和可维护性.函数在编程语言…...

Unity 下载Zip压缩文件并且解压缩

1、Unity下载Zip压缩文件主要使用UnityWebRequest类。 可以参考以下方法&#xff1a; webRequest UnityWebRequest.Get(Path1); //压缩文件路径webRequest.timeout 60;webRequest.downloadHandler new DownloadHandlerBuffer();long fileSize GetLocalFileSize(Path2); …...

c++11新特性篇-委托构造函数和继承构造函数

C11引入了委托构造函数&#xff08;Delegating Constructor&#xff09;和C11及后续标准引入了继承构造函数&#xff08;Inheriting Constructor&#xff09;两个特性。 1.委托构造函数 委托构造函数是C11引入的一个特性&#xff0c;它允许一个构造函数调用同一类的另一个构造…...

Flink SQL处理回撤流(Retract Stream)案例

Flink SQL支持处理回撤流&#xff08;Retract Stream&#xff09;&#xff0c;下面是一个使用Flink SQL消费回撤流的案例&#xff1a; 假设有一个数据流&#xff0c;包含用户的姓名和年龄&#xff0c;希望计算每个姓名的年龄总和。 以下是示例代码&#xff1a; // 创建流执行…...

6.5.事件图层(MapEventsOverlay)

愿你出走半生,归来仍是少年&#xff01; 简单来说就是一个不参与绘制但是可进行交互的图层&#xff0c;它具备了单击和长按的交互功能。 booleanonSingleTapConfirmed(MotionEvent e, MapView mapView)booleanonLongPress(MotionEvent e, MapView mapView) 通过继承它重写上方…...

供暖系统如何实现数据远程采集?贝锐蒲公英高效实现智慧运维

山西某企业专注于暖通领域&#xff0c;坚持为城市集中供热行业和楼宇中央空调行业提供全面、专业的“智慧冷暖”解决方案。基于我国供热行业的管理现状&#xff0c;企业成功研发并推出了可将能源供应、管理与信息化、自动化相融合的ICS-DH供热节能管理系统。 但是&#xff0c;由…...

Flutter笔记:关于Flutter中的大文件上传(上)

Flutter笔记 关于Flutter中的大文件上传&#xff08;上&#xff09; 大文件上传背景与 Flutter 端实现文件分片传输 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#…...

腾讯云CVM服务器5年可选2核4G和4核8G配置

腾讯云服务器网整理五年云服务器优惠活动 txyfwq.com/go/txy 配置可选2核4G和4核8G&#xff0c;公网带宽可选1M、3M或5M&#xff0c;系统盘为50G高性能云硬盘&#xff0c;标准型S5实例CPU采用主频2.5GHz的Intel Xeon Cascade Lake或者Intel Xeon Cooper Lake处理器&#xff0c;…...

数据结构:反射

基本概念 反射中的四个类 Class类 Java文件在被编译之后&#xff0c;生成了.class文件&#xff0c;JVM此时解读.class文件&#xff0c;将其解析为java.lang.Class 对象&#xff0c;在程序运行时每个java文件就最终变成了Class类对象的一个实例。通过反射机制应用这个 实例就…...

45 深度学习(九):transformer

文章目录 transformer原理代码的基础准备位置编码Encoder blockmulti-head attentionFeed Forward自定义encoder block Deconder blockEncoderDecodertransformer自定义loss 和 学习率mask生成函数训练翻译 transformer 这边讲一下这几年如日中天的新的seq2seq模式的transform…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...