0


Elasticsearch 从入门到实战到精通(Docker版)

解决什么问题

有关系型数据库MySQL 为什么还用全文搜索引擎(Elasticsearch/Solr)?

MySQL 侧重数据存储,用like进行简单关键字搜索,但无法应对海量数据下各种复杂条件的查询。

如果需要全文进行模糊搜索,MySQL性能是非常低的.例如如下场景: 在一张一亿数据量的手机详情表,搜索小米手机,
如果用MySQL实现的话可能会这样写:

>select*from phone where phone_brand like"%小米%"

理论上是可以查到相关数据的,但是需要全表扫描,比较慢,浪费性能,时间可能在分钟级别甚至更多。
另外一些电商系统里面,需要对商品的不同属性按照不同的关键字来检索商品,如果用mysql来做,mysql承受不了那么大的压力,就需要用到ElasticSearch或Solr来解决。

是什么

Elasticsearch是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。

Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的Elastic)于 2010 年首次发布。 Elasticsearch 以其简单的 REST 风格 API、分布式特性、速度和可扩展性而闻名,是 Elastic Stack 的核心组件;

Elastic Stack是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。

详情见官网

本质

全文搜索引擎

全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,

当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。
这个过程类似于通过字典中的检索字表查字的过程。全文搜索搜索引擎数据库中的数据。

详情见全文搜索

工作原理

当ElasticSearch的节点启动后, 它会利用多播(multicast)(或者单播, 如果用户更改了配置)寻找集群中的其它节点, 并与之建立连接。
在集群中, 一个节点被选举成主节点(master node)。 这个节点负责管理集群的状态, 当群集的拓扑结构改变时把索引分片分派到相应的节点上。在这里插入图片描述

核心理念

  1. 开箱即用
  2. 天生集群
  3. 自动容错
  4. 扩展性强
  5. 近实时搜索和版本控制

Lucene

Lucene是一个高性能、可伸缩的信息搜索(IR)库。它可以为你的应用程序添加索引和搜索能力。Lucene是用java实现的、成熟的开源项目.

Lucene是一个jar包,里面包含了各种建立倒排索引的方法,java开发的时候只需要导入这个jar包就可以开发了。

Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

Lucene不是分布式的。ES是分布式的
详情见Lucene

ES基础概念

索引 类型 文档 属性

在这里插入图片描述
和mysql 类比,上图中的几个概念分别相当于mysql 中的
ESMySQL索引数据库文档数据属性列名

google、microsoft、megacorp 三个索引 相当于 三个数据库;
google索引下有employee、product类型,相当于 google数据库下有employee 表、product 表;
employee类型下的文档 相当于 表中的数据;
id,name,age属性相当于表中的列名

另外在数据库中的增insert、删delete、改update、查search操作等价于ES中的增PUT/POST、删Delete、改_update、查GET.

倒排索引

在商城搜小米 ,搜索结果: 小米手机,也可能是吃的小米,是依赖于倒排索引。
以前是根据ID查内容,倒排索引之后是根据内容查ID,然后再拿着ID去查询出来真正需要的东西。

分词:
将整句拆为单词
保存的记录

1-红海行动
2-探索红海行动
3-红海特别行动
4-红海纪录片
5-特工红海特别探索
词记录红海1,2, 3, 4, 5行动1,2, 3探索2, 5特别3,5纪录片4特工5
检索红海行动,根据相关性得分得出,根据上表中词这列 找到红海,行动,再找到对应记录 1,2,3,4,5,找到对应的内容

Docker 安装 Es

下载镜像文件

docker pull elasticsearch:7.4.2  存储和检索数据
docker pull kibana:7.4.2  (可视化界面检索数据,也可不装,但需要命令)

解释:
下载elasticsearch和kibana镜像

在这里插入图片描述

创建实例 ES & Kibana

mkdir -p /mydata/elasticsearch/config 
mkdir -p /mydata/elasticsearch/data

解释:
mkdir 创建虚拟机文件夹:目的将es配置文件挂载在config文件夹下,通过修改config文件夹里的es配置就可以改掉docker容器中es配置

在这里插入图片描述

因为有访问权限,所以加sudo

echo"http.host: 0.0.0.0">> /mydata/elasticsearch/config/elasticsearch.yml  

解释:
写了一个配置,配置是http.host: 0.0.0.0
代表es可被远程任何机器访问,将这个配置写入elasticsearch.yml 文件中

chmod -R 777 /mydata/elasticsearch/ 

解释:
保证权限 将 /mydata/elasticsearch/ 目录的 所有人的权限都变为可读写 执行

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.4.2

在这里插入图片描述

解释:
docker run 启动容器;
–name: 为容器起名字;
-p 暴露端口9200(发送http请求rest api的时候,给这个端口发请求)和9300(es在分布集群下,节点间通信端口) ;
-e 参数: -e “discovery.type=single-node” 以单节点运行;
-v: 挂载 将/usr/share/elasticsearch/config/elasticsearch.yml 挂载到 /mydata/elasticsearch/config/elasticsearch.yml;
-d: 用elasticsearch:7.4.2 这个镜像;

特别注意:

-e ES_JAVA_OPTS=“-Xms64m -Xmx256m” \ 测试环境下,设置 ES 的初始内存和最大内存,否则导 致过大启动不了 ES

dockerps

使用 docker ps 来查看我们正在运行的容器,如下图:

在这里插入图片描述

访问:http://你的虚拟机地址:9200/,出现下图说明es安装成功

请添加图片描述

kibana

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://你的虚拟机地址:9200 -p 5601:5601 -d kibana:7.4.2

注意: http://你的虚拟机地址:9200 一定改为自己虚拟机的地址

在这里插入图片描述

kibana 可视化界面,访问http://你的虚拟机地址:5601/,出现下图说明kibana安装成功

请添加图片描述
请添加图片描述

Postman

如果不用 kibana,用Postman 即可。 在Postman
访问http://你的虚拟机地址:9200/,返回信息和在浏览器一样,如下图

请添加图片描述

初步检索

1、_cat

GET /_cat/nodes:查看所有节点
GET /_cat/health:查看 es 健康状况
GET /_cat/master:查看主节点
GET /_cat/indices:查看所有索引 show databases;

GET /_cat/nodes:查看所有节点

请添加图片描述

GET /_cat/health:查看 es 健康状况

请添加图片描述

GET /_cat/master:查看主节点

请添加图片描述

GET /_cat/indices:查看所有索引 show databases;

请添加图片描述


本文转载自: https://blog.csdn.net/renmengmeng520/article/details/124857321
版权归原作者 一个处女座的程序媛 所有, 如有侵权,请联系我们删除。

“Elasticsearch 从入门到实战到精通(Docker版)”的评论:

还没有评论