01_Elasticsearch入门介绍

2023-09-16 15:58:39


什么是Elasticsearch?它具有什么功能、适用场景以及特点介绍

Elasticsearch 是什么

The Elastic Stack, 包括 Elasticsearch、 Kibana、 Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。

Elaticsearch,简称为 ES, ES 是一个开源的高扩展的分布式全文搜索引擎, 是整个 ElasticStack 技术栈的核心。

它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。

Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统

1、什么是搜索?

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

3、什么是全文检索、倒排索引和Lucene?

4、什么是Elasticsearch?

1、什么是搜索?

百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜欢的电影,或者说找一本喜欢的书,或者找一条感兴趣的新闻(提到搜索的第一印象)百度 != 搜索,这是不对的

垂直搜索(站内搜索)

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

IT系统的搜索:OA软件,办公自动化软件,会议管理,日程管理,项目管理,员工管理,搜索“张三”,“张三儿”,“张小三”;有个电商网站,卖家,后台管理系统,搜索“牙膏”,订单,“牙膏相关的订单”

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

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

做软件开发的话,或者对IT、计算机有一定的了解的话,都知道,数据都是存储在数据库里面的,比如说电商网站的商品信息,招聘网站的职位信息,新闻网站的新闻信息,等等吧。所以说,很自然的一点,如果说从技术的角度去考虑,如何实现如说,电商网站内部的搜索功能的话,就可以考虑,去使用数据库去进行搜索。

1、比方说,每条记录的指定字段的文本,可能会很长,比如说“商品描述”字段的长度,有长达数千个,甚至数万个字符,这个时候,每次都要对每条记录的所有文本进行扫描,并判断说,你包不包含我指定的这个关键词(比如说“牙膏”)

2、还不能将搜索词拆分开来,尽可能去搜索更多的符合你的期望的结果,比如输入“生化机”,就搜索不出来“生化危机”

用数据库来实现搜索,是不太靠谱的。通常来说,性能会很差的。

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

(1)全文检索,倒排索引

在说到全文检索就绕不开倒排索引的概念。倒排索引就是说在大量数据的前提下,比如商品的名称或者是描述里面的字符按照一定的规则拆分,然后存入到倒排索引当中,当用户进行搜索的时候不需要去每一条数据中遍历比对商品名称和商品描述,只需要去倒排索引中匹配相应的数据就行。这样大大的提升了查询的性能,如下图分析说明:

在这里插入图片描述
(2)lucene

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

4、什么是Elasticsearch?

简单来说就是Elasticsearch就是把lucene封装了起来,解决分布式情况下lucene的数据不一致,可靠性小的问题。

Elasticsearch的优点:

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

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

3.封装了更多的高级功能,以给我们提供更多高级的支持,让我们快速的开发应用,开发更加复杂的应用:复杂的搜索功能,聚合分析的功能,比如基于地理位置的搜索(距离我当前位置1公里以内的奶茶店);

5、Elasticsearch的功能

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

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

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

elasticsearch特点:分布式,搜索,数据分析

(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小时(这就不叫近实时,叫做离线批处理(batch-processing);所谓的进实时就是在秒级别对数据进行搜索和分析;

跟分布式/海量数据相反的:lucene,单机应用,只能在单台服务器上使用,最多只能处理单台服务器可以处理的数据量;

6、Elasticsearch的适用场景

国外

(1)维基百科,类似百度百科,

(2)The Guardian(国外新闻网站),类似搜狐新闻,用户行为日志(点击,浏览,收藏,评论)+社交网络数据(对某某新闻的相关看法)进行数据分析,给到每篇新闻文章的作者,让他知道他的文章的公众反馈(好,坏,热门,垃圾,鄙视,崇拜)

(3)Stack Overflow(国外的程序异常讨论论坛),IT问题程序的报错提交上去,有人会跟你讨论和回答。全文检索,搜索相关问题和答案,程序报错了,就会将报错信息粘贴到里面去,搜索有没有对应的答案

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

(5)电商网站,检索商品

(6)日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logstash+kibana)

(7)商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户。比如说订阅牙膏的监控,如果高露洁牙膏的家庭套装低于50块钱,就通知我,我就去买

(8)BI系统,商业智能(Business Intelligence)。比如说有个大型商场集团做BI分析一下某某区域最近3年的用户消费金额的趋势以及用户群体的组成构成,产出相关的数张报表。比如**区最近3年每年消费金额呈现100%的增长,而且用户群体85%是高级白领,根据这个分析结果可能就决定开一个新商场,整个过程就是商业智能的体现。使用ES执行数据分析和挖掘,Kibana进行数据可视化

国内

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

7、Elasticsearch的特点

(1)可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上,服务小公司

(2)Elasticsearch不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起,才形成了独一无二的ES;lucene(全文检索),商用的数据分析软件(也是有的),分布式数据库(mycat)

(3)对用户而言,是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下ES,就可以作为生产环境的系统来使用了,数据量不大,操作不是太复杂

(4)数据库的功能面对很多领域是不够用的(数据库最大的特点是事务,还有各种联机事务型的操作);对特殊的功能支持就不是很好,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的实时处理;Elasticsearch作为传统数据库的一个补充,提供了数据库所不不能提供的很多功能

更多推荐

Java面向对象编程

主机甲和乙已建立了TCP连接,甲始终以MSS=1KB大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为10KB的确认段。若甲在t时刻发生超时时拥塞窗口为8KB,则从t时刻起,不再发生超时的情况下,经过10个RTT后,甲的发送窗口是()A.10KBB.12KBC.14KBD.15KB答案:A某主

Centos下载安装连接MySQL8

一、下载链接:https://dev.mysql.com/downloads/mysql/点击Download,如下图:没有登录,点击“Nothanks,juststartmydownlaod.”即可下载二、安装2.1将下载的mysql-8.0.34-linux-glibc2.28-x86_64.tar.gz上传到服务

Java手写强化学习

Java手写强化学习1.强化学习算法思维导图以下是强化学习算法的实现原理的思维导图,使用Mermanid代码表示:#mermaid-svg-G97ymGcDIKLGvwqB{font-family:"trebuchetms",verdana,arial,sans-serif;font-size:16px;fill:#3

【JS/TS游戏开发实战】LayaAir 全平台 3D 引擎

LayaAir3.0引擎,包括引擎代码、项目开发工具、项目发布,三大部分。目录一、引擎代码1.1引擎通用部分1.22D引擎1.33D引擎二、IDE(集成开发环境)2.1通用模块2.12D模块2.23D模块三、项目发布3.1Web版发布3.1.1构建发布3.1.2发布选项3.2小游戏发布3.3Native打包发布3.3.

数据库计算机三级等级考试--数据库技术相关知识点和笔记

数据库计算机三级等级考试–数据库技术计算机三级等级考试笔记,是博主通过计算机三级数据库技术考试的相关笔记,此篇博客,不仅适合需要考计算机三级考试的各位考生,也适合在职场处理关于数据库的部分操作,个人认为算是一篇使用性比较强的文档,我个人认为,我目前所在开发岗位,在回顾去看这篇文档,我都会再次有收获,对了,如果你需要计算

外包干了2个月,技术退步明显了...

先说一下自己的情况,大专生,19年通过校招进入深圳某软件公司,干了接近4年的功能测试,今年8月份,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试,已经让我变得不思进取,谈了2年的女朋友也因为我的心态和工资和我分手了。于是,我决定要改变现状,冲击下大厂。刚开始准备

浅析-ES6

4、ES6语法指南后端项目搭建完毕,接下来就是前端页面了。不过在这之前需要一些准备工作。我们需要学习ES6的语法标准。什么是ES6?就是ECMAScript第6版标准。4.1.什么是ECMAScript?来看下前端的发展历程:web1.0时代:最初的网页以HTML为主,是纯静态的网页。网页是只读的,信息流只能从服务的到

2023年8月知识复习

物联网总括物联网即通过网络将客观事物进行智能化互联的网络系统。互联网主要是人与人、人与计算机之间的通信,而物联网主要是物联网设备之间的通信。注意:数据上传到云端不是物联网的必要条件。物联网可以仅在本地网络和局域网中进行通信和数据处理。比如在工业控制系统中,设备之间需要实时通信和数据处理,但出于隐私、安全性或数据管控的考

C++核心编程之类和对象---C++面向对象的三大特性--封装

目录类和对象类和对象的概念C++面向对象的三大特性一、封装封装案例1:设计一个学生类,可以给姓名和学号赋值,可以显示学生的姓名和学号。二、访问权限访问权限有三种struct和class的区别三、成员属性私有化成员属性私有化的优点:四、封装案例案例1:设计立方体类案例2:点和圆的关系类和对象面向对象编程(OOP)是现代编

【C语言】进阶——字符串和内存函数

目录一:非限制字符串函数1.strlen👊模拟实现方法1:计算器法方法2.指针-指针方法3.函数调用2.strcpy👊模拟实现3.strcat👊模拟实现4.strcmp👊模拟实现二:可限制字符串函数1.strncpy2.strncat3.strncmp4.strstr👊模拟实现5.strtok6.strerr

【1++的C++进阶】之C++11(二)

👍作者主页:进击的1++🤩专栏链接:【1++的C++进阶】文章目录一,类的新变化二,可变参数模板三,lambda表达式一,类的新变化在C++03之前,我们的默认成员函数有6个,我们在类与对象这篇中有过详细的讲解。C++11中又增加了两个默认成员函数—移动构造与移动赋值重载,其底层原理以及优势我们在上节已经有过描述。

热文推荐