为什么要用Elasticsearch

概念

Elasticsearch 简称ES,是一个分布式全文检索引擎。
比如github的代码检索就是用了ES,百度也有用ES。
由于Lucene的api相对比较复杂,所以ES其实是对Lucene的封装简化,并且提供了一套比较简单的api文档。
es官网

使用场景

主要是海量数据检索,关键词:海量。因为只有数据量大了才能体现ES的优势。

以下是我能想到的或者是之前有遇到过的场景:

1、常用的经典组合ELK(elasticsearch+Logstash+kibana )做日志分析处理

elasticsearch:提供日志的分布式存储和全文检索
Logstash:传输日志
kibana:前端展示

2、项目中海量数据的存储和搜索

比如让你做一个类似于微博的后台服务,光检索这块,就可以考虑ES

3、项目中的关系型数据的前置缓存

如果你的项目,正在使用关系型数据库,有以下特点,就可以考虑用ES作一层缓存

  • 数据量大,但数据结构又不太复杂
  • 查询压力大,查询条件多样化,多变

举个例子,比如电商网站的,针对审核人员,客服人员专用的查询订单的接口
这类接口要求查询快,而且可查历史所有上亿级别的订单,而且不一定是一定根据订单号查,可能查询条件很多,有类似模糊匹配。那只用关系型数据库,怕是得好好下功夫了,但如果使用ES,那就非常简单了。

ES 优点

支持横向扩展
支持很多插件
其实说全文检索的核心优点,应该是要说Lucene的,所以如果要深挖,建议先学Lucene,比如lucene的数据和索引分离存储等,硬说成是ES的优点那也行。
总而言之,ES如果是一辆跑车,那Lucene就是引擎,就是核心。ES只不过是让这个引擎物有所用,真正被利用起来而已。

同类框架solr

github以前是用solr作全文检索的,后来换成了ES
基本上标志着ES把solr给超越了
后来很少听人说项目中还用Solr的,基本都是ES了

安装

安装单实例es

首先es版本有1.x,2.x,5.x,6.x,7.x
使用最新的,尽量避免使用5.x之前的

https://www.elastic.co/cn/downloads/elasticsearch
进入es官网下载,安装(需要有jdk环境,eg:1.8)
页面访问 localhost:9100

安装可视化页面-Head插件

下载:https://github.com/mobz/elasticsearch-head
需要有node环境,eg:8.2

npm install 安装
npm run start 启动

还有其他可视化插件,基本上都是下载安装,配置url就能用,请自行搜索吧

修改es配置,解决和head的跨域问题

es的config/elasticsearch.yml文件下
文件末尾加以下内容

http.cors.enable: true
http.cors.allow-origin: "*"

分别启动es和head
页面访问 localhost:9100

安装分布式集群es

1个master节点+2个slave节点

1、master节点配置
es的config/elasticsearch.yml文件下
文件末尾加以下内容,代表当前这个服务是master节点

# 集群名字
cluster.na zhangsan
# 节点名字为master
node.name: master
# 指定当前节点为master
node.master: true
# 绑定本地ip
network.host: 127.0.0.1

启动master
2、slave节点配置
复制安装包信息,作为slave
es的config/elasticsearch.yml文件下
文件末尾加以下内容,代表当前这个服务是slave节点

# 集群名字,这个必须和master节点的集群名字一致
cluster.na zhangsan
# 节点名字为slave01,多个节点就slave02,slave03...
node.name: slave01# 绑定本地ip
network.host: 127.0.0.1
# 配置slave的端口,es默认端口是9200,我们让master是默认的9200
http.port: 9201
# 配置这个,为了能找到master
dicxovery.zen.ping.unicast.host: ["127.0.0.1"]

启动slave01,slave02

es的一些基础概念

索引

含有相同属性的文档集合
相当于mysql的数据库

类型

索引可以定义一个或多个类型,文档必须属于一个类型
相当于mysql的表,数据库里可以有一个或多个表,一行记录必须属于一个表

文档

文档是可以被索引的基本数据单位
相当于mysql的一行记录

分片

每个索引都有多个分片,每个分片都是一个lucene索引
es在创建索引时默认创建5个分片
分片数量必须在创建索引时指定,后面不能修改
相当于mysql的数据分片

备份

copy一份分片就完成了分片的备份
es在创建索引时默认创建1个备份
备份可以后期修改
相当于mysql的数据备份

集成spring-boot

es是提供了一套restful api接口
spring-boot集成,也是通过代码,去构建各个接口的参数再执行的。

还有安装分词器之类的,这其实都是lucene的知识点了。

最后要说

照着网上的教程,可以很快的搭起一套ES的服务,与项目的集成使用也不是很难。

难点在于要搞清楚为什么ES可以做全文检索,其实还是绕不开Lucene,学习Lucene索引才是重中之重。

对于应用来说,重点在于要知道ES能做什么,擅长做什么,什么时候用。

我总结了:就是海量数据的全文检索。

建议有本书可以看下:从Lucene到Elasticsearch全文检索实战
在这里插入图片描述

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

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

相关文章

[设计模式] ------ 建造者模式(对比模板模式)

建造者模式 建造者模式,是为了构建一类具有相同执行顺序的但实现不一样,最后产生不一样的东西的效果。 举个例子,比如写作文。 每次写作文,我们大致有写标题,写开头,写内容,写结尾这些步骤。…

[设计模式] ------ 观察者模式和他的升级版发布订阅模式

概念 观察者模式,原理很简单,把A类的子类分别注入到B类中,通过用B类调用方法,循环调用A类的方法,就是所谓观察者模式 伪代码如下,最快的速度理解观察者模式: 接口 A{// 观察者接口notify(); …

[设计模式] ------ 工厂方法模式

工厂方法模式 手机厂造手机,肥皂厂造肥皂,药品厂造药品。 假设有一大类对象A1,A2,A3,A4…他们都有一个共同的父类A A1可以想成是手机,A2可以想成肥皂… (下面例子的A1Factory就是手机厂,A2Factory就是肥皂厂&#x…

[设计模式] ------ 抽象工厂模式

抽象工厂模式 抽象工厂模式,就是对工厂方法模式加以改进而已,其实就是用简单工厂模式的套路创建各个工厂,后面和工厂模式就一模一样了。 其实就是相当于将创建哪个工厂的权利再次放给调用端。 调用端在调用的时候,指定用哪个工厂…

[设计模式] ------ 对比总结:简单工厂模式、工厂方法模式、抽象工厂模式

三个概念: 简单工厂模式:就是一个简单的工厂类,根据不同的入参类型,返回不同的父类引用的子类对象。 工厂方法模式:就是将生成哪个子类对象的过程,延迟到工厂子类实现,工厂父类只定义接口。 抽…

[设计模式] ------ 原型模式(浅拷贝和深拷贝)

原型模式 原型模式就是使用复制对象,创建出新的对象,并且不需要知道创建的细节(比如类的属性的赋值等等)。 基本使用(浅拷贝) 常见的就是使用Object的clone方法。需要让类实现Cloneable并重写clone方法&…

机器学习笔记(了解)

1、概念 机器学习,就是通过历史数据找出一定的规律,并使用这些规律对将来不确定的场景进行决策。 机器学习VS数据分析 数据分析,是人为的从历史交易数据中找规律,从而决策。 机器学习,是机器使用算法,从…

机器学习笔记(常见算法)

C4.5 属于决策树算法,既可以解决分类问题,也可以解决回归问题,属于有监督算法。 现在基本不用这个算法了。 K-Means 属于聚类算法,属于无监督算法 SVM(*) 支持向量机。 曾经一度认为是分类效果最好的算…

赶紧看一下mysql8.0版本的新特性,你的数据库是不是该升级了

这里写目录标题前言mysql8.0的新特性1、账户安全2、优化器索引2.1、隐藏索引(invisible)2.2、降序索引2.3、函数索引3、SQL语句增强4、新增数据分析函数5、InnoDB增强5.1、优化了一些元数据文件5.2、将系统表mysql和数据字典表,全部改为InnoD…

ThreadLocal不仅要应付面试,更要真的理解,真的会用

前言 记得我几年前第一次面试的时候,就是被问了这个,记得面试官直接就让我说说ThreadLocal的实现原理以及平时有没有见过哪些地方用到了。 我当时初入职场,还是一个大菜鸟,所以直接就被干蒙了,至今还记忆犹新。 闲来…

秒杀业务的基础点

秒杀的是一个很常见的业务了。就是在某个时刻,让大量用户抢购少量的优惠的商品,从而达到商品曝光和电商网站的曝光,增大用户流量,从而提升整体销售额。 比如今年疫情下,各大电商网站,就针对口罩开展了秒杀…

随想,产品思维和开发思维

有时候,产品思维和开发思维,由于出发点的不同,会产生较大的分歧。 作为一个开发,不仅要有自己的思维,也要了解产品的思维,这样才能在和产品的撕逼的战斗中所向披靡,百战百胜。 举个例子&#x…

Base64编码的原理与常用实现

这篇主要是为了后面好介绍加密算法,做的铺垫。 这个是基础,什么是一个程序员的涵养,这些基础就是涵养。 平时可能用不到,但必须得会。 如果连这个原理都说不上来,就别玩王者荣耀绝地求生英雄联盟和平精英了&#xff0c…

MD5算法原理与常用实现

目录定义MD5特点常见应用场景1、校验文件的完整性2、存储用户密码原理1、填补信息2、拿到初始值3、真正的计算MD5为什么不可逆java实现和使用定义 MD全称Message-Digest,即信息摘要,所以MD家族的算法也叫信息摘要算法 MD家族有MD2、MD3、MD4、MD5&#…

SHA算法原理与常用实现

看本文前,最好先看看之前的这一篇关于MD5算法的介绍。 MD5算法原理与常用实现 本文目录定义MD5和SHA-1的碰撞问题常见应用场景1、类似MD5的应用场景2、比特币3、https签名算法会用到SHA-256算法原理1、填补信息2、拿到初始值3、真正的计算java实现和使用定义 SHA算…

MAC算法原理与常用实现

看本文前,最好先看看之前的对于MD5算法和SHA算法的介绍。 本文目录定义常见应用场景1、linux客户端:SecureCRT2、Google身份验证器3、银联pos机终端原理java实现和使用定义 MAC(Message Authentication Codes),是一种…

对称加密算法原理与常用实现

目录定义常用对称加密算法DES3DESAESPEB常用对称加密算法的java实现DES实现3DES实现AES实现PEB实现定义 原文通过加密秘钥生成密文,密文通过解密秘钥得到原文。 对于加密秘钥和解密秘钥是相同的算法,就叫对称加密算法。 常用对称加密算法 DES Data E…

面试 HTTP ,99% 的面试官都爱问这些问题

HTTP 和 HTTPS 的区别HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范HTTP 主要内容分为三部分,超文本(Hypertext)、传输…

非对称加密算法 --- RSA签名算法

目录RSA原理RSA应用场景RSA加密场景RSA签名场景RSA加解密和签名算法的java实现RSA原理 通过一定的规则,生成公钥和私钥,公钥和私钥总是成对出现。 公钥可以公开出去,任何人都可以知道。 私钥只有自己知道。 RSA算法能保证,公钥加…

@JsonFormat失效解决

先说结论 JsonFormat失效,换成JSONField就好了 问题经过和原理 JsonFormat作为Date类型的属性值,返回前端格式化处理,很方便。 比如: JsonFormat(pattern "yyyy/MM/dd HH:mm:ss")private Date updateTime;返回给前端…