本文主要是介绍【愚公系列】2023年11月 Java教学课程 208-ElasticSearch(初识和安装),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
文章目录
- 🚀前言
- 🚀一、ElasticSearch的相关概念
- 🔎1.初识ElasticSearch
- 🦋1.1 了解ES
- ☀️1.1.1 elasticsearch的作用
- ☀️1.1.2 ELK技术栈
- ☀️1.1.3 elasticsearch和lucene
- ☀️1.1.4 搜索引擎技术排行榜
- 🦋1.2 基于数据库查询的问题
- 🦋1.3 倒排索引
- 🦋1.4 ES和MySql的比较
- 🦋1.5 ES使用场景
- 🔎2.安装ElasticSearch
- 🦋2.1 ES安装
- ☀️2.1.1 Liunx下部署
- ☀️2.1.2 Docker下部署
- ☀️2.1.3 访问elasticsearch
- 🦋2.2 ES辅助工具安装
- ☀️2.2.1 Postman安装
- ☀️2.2.2 Kibana安装
- 🌈2.2.2.1 Liunx下安装
- 🌈2.2.2.2 Docker下安装
- ☀️2.2.3 head安装
- 🌈2.2.3.1 Node安装
- 🌈2.2.3.2 grunt安装
- 🌈2.2.3.3 head安装
- 🔎3.ElasticSearch核心概念
- 🚀感谢:给读者的一封信
🚀前言
Elasticsearch是一个开源的分布式搜索引擎和数据分析引擎,它是建立在Lucene搜索引擎库之上的。 ElasticSearch被用于搜索、分析、存储、处理和可视化大量数据,其提供了丰富的查询语言、API和工具,可以快速准确地搜索和分析任意类型和大小的数据,而无需在存储或搜索方面做出任何妥协。 Elasticsearch的主要特点包括高可靠性、可扩展性、实时性、全文搜索、多语言支持、聚合分析、自然语言处理和地理空间搜索等功能。
资源文件下载地址:https://download.csdn.net/download/aa2528877987/88596281?spm=1001.2014.3001.5503
🚀一、ElasticSearch的相关概念
🔎1.初识ElasticSearch
🦋1.1 了解ES
☀️1.1.1 elasticsearch的作用
Elasticsearch是一个基于Lucene的搜索引擎,可以实现全文搜索、分析和实时数据处理。它可以用于处理各种类型的数据,包括文本、数字、地理空间数据等,并可以进行复杂的查询和分析操作。
使用场景如下:GitHub上搜索代码、电商搜索商品、百度、打车。
☀️1.1.2 ELK技术栈
ELK技术栈是指Elasticsearch、Logstash和Kibana三个开源软件的组合,用于处理大量的日志数据和实现实时分析、搜索和可视化。具体来说,ELK技术栈的作用如下:
-
Elasticsearch:是一个分布式的搜索和分析引擎,可用于存储、搜索和分析各种类型的数据。它提供高效的全文搜索、聚合和过滤等功能,支持分布式架构,能够快速处理大量数据。
-
Logstash:是一款数据处理管道,可以用于收集、转换和存储各种类型的数据。它支持多种数据源(如日志文件、消息队列等),可以进行数据清洗、转换和格式化,最终输出到Elasticsearch或其他存储系统。
-
Kibana:是一款开源的数据可视化工具,可以用于展示和分析Elasticsearch中存储的数据。它提供丰富的图表、表格、地图等可视化组件,支持动态查询、过滤和分析数据。
ELK技术栈广泛应用于日志管理、系统监控、安全分析等领域,可以帮助用户快速发现和解决问题,提高数据分析效率。同时,ELK技术栈还可以与其他工具和系统集成,扩展其功能和应用场景。
☀️1.1.3 elasticsearch和lucene
Elasticsearch是一种分布式搜索和分析引擎,基于Lucene库构建。Lucene是一个Java库,用于全文检索和文本分析。 Elasticsearch是一个高度可扩展的搜索引擎,它简化了Lucene的使用,提供了基于REST的API,可以轻松地将数据存储和检索到分布式系统中。 Elasticsearch还提供了许多其他功能,例如实时分析,可视化和安全性。与Lucene相比,Elasticsearch更适合处理大量数据和高并发查询。
☀️1.1.4 搜索引擎技术排行榜
🦋1.2 基于数据库查询的问题
Mysql数据库性能瓶颈的出现会受到多种因素影响,比如硬件配置、数据库设计、SQL查询优化等,因此无法精确的回答何时会出现性能瓶颈。但是一般情况下,当数据量达到几千万行时,会开始出现性能问题,而当数据量达到上亿行时,性能问题将愈发严重,需要通过优化手段来解决。
🦋1.3 倒排索引
一个简单的倒排索引案例可以是一个搜索引擎。当用户在搜索引擎中输入一个查询词时,搜索引擎可以通过倒排索引来快速地找到包含该查询词的文档。
假设有以下三个文档:
- 文档1:我爱北京天安门。
- 文档2:上海是一个美丽的城市。
- 文档3:北京欢迎你。
我们可以通过以下步骤来创建倒排索引:
- 对每个文档进行分词,得到词项列表:
- 文档1:我,爱,北京,天安门。
- 文档2:上海,是,一个,美丽,的,城市。
- 文档3:北京,欢迎,你。
- 对每个词项建立索引,记录出现该词项的文档编号:
- 北京:文档1、文档3
- 天安门:文档1
- 上海:文档2
- 美丽:文档2
- 欢迎:文档3
- 你:文档3
通过这种方式,我们可以快速地找到包含任意查询词的文档,而不需要全文检索。例如,当用户在搜索引擎中查询“北京”时,搜索引擎可以直接查找包含“北京”的文档编号,然后返回相应的文档。
正向索引:
倒排索引:
🦋1.4 ES和MySql的比较
- index(索引):相当于mysql的库
- 映射:相当于mysql 的表结构
- document(文档):相当于mysql的表中的数据
统一的把mysql与elasticsearch的概念做一下对比:
MySQL | Elasticsearch | 说明 |
---|---|---|
Table | Index | 索引(index),就是文档的集合,类似数据库的表(table) |
Row | Document | 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式 |
Column | Field | 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column) |
Schema | Mapping | Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema) |
SQL | DSL | DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD |
-
Mysql:擅长事务类型操作,可以确保数据的安全和一致性
-
Elasticsearch:擅长海量数据的搜索、分析、计算
往往是两者结合使用:
- 对安全性要求较高的写操作,使用mysql实现
- 对查询性能要求较高的搜索需求,使用elasticsearch实现
- 两者再基于某种方式,实现数据的同步,保证一致性
🦋1.5 ES使用场景
官网:https://www.elastic.co/
ES适用于以下场景:
-
分布式搜索:ES可以将大量数据分布式存储并索引,实现分布式搜索和聚合。它可以快速搜索和分析大规模日志、文档、网站、社交媒体等数据。
-
实时数据分析:ES可以对实时数据进行分析,如网络流量监控、实时日志分析等。它支持各种数据源,如Kafka、Logstash、Beats等,并可以将数据进行聚合、统计和可视化。
-
企业搜索:ES可以构建企业搜索引擎,提供搜索、过滤、聚合、推荐等功能。企业可以通过ES搜索内部文档、邮件、合同、客户数据等各种业务数据。
-
商品搜索:ES可以构建商品搜索引擎,提供高效的商品搜索、过滤、排序、聚合等功能。它可以快速返回搜索结果,并支持各种推荐算法。
-
日志分析:ES可以对日志进行实时分析,如错误日志、访问日志、系统监控等。它可以对日志进行分析、聚合、可视化,并发现潜在的问题和异常情况。
-
地理空间搜索:ES可以支持地理空间搜索和聚合,如查找附近的商家、搜索城市内的房源、分析用户位置等。它可以支持各种地理空间数据类型和查询语法。
🔎2.安装ElasticSearch
🦋2.1 ES安装
☀️2.1.1 Liunx下部署
1、上传ElasticSearch安装包
alt+p # 打开sftp窗口
# 上传es安装包
put e:/software/elasticsearch-7.4.0-linux-x86_64.tar.gz
2、执行解压操作 ,如下图
# 将elasticsearch-7.4.0-linux-x86_64.tar.gz解压到opt文件夹下. -C 大写tar -zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz -C /opt
3、创建普通用户
因为安全问题,Elasticsearch 不允许root用户直接运行,所以要创建新用户,在root用户中创建新用户,执行如下命令:
useradd itheima # 新增itheima用户
passwd itheima # 为itheima用户设置密码
4、为新用户授权,如下图
chown -R itheima:itheima /opt/elasticsearch-7.4.0 #文件夹所有者
将 /opt/elasticsearch-7.4.0文件夹授权给itheima用户,由上图可见,我们的文件夹权限赋给了itheima
5、修改elasticsearch.yml文件
vim /opt/elasticsearch-7.4.0/config/elasticsearch.yml
# ======================== Elasticsearch Configuration =========================
cluster.name: my-application
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
-
cluster.name:配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称
-
node.name:节点名,elasticsearch会默认随机指定一个名字,建议指定一个有意义的名称,方便管理
-
network.host:设置为0.0.0.0允许外网访问
-
http.port:Elasticsearch的http访问端口
-
cluster.initial_master_nodes:初始化新的集群时需要此配置来选举master
6、修改配置文件
新创建的itheima用户最大可创建文件数太小,最大虚拟内存太小,切换到root用户,编辑下列配置文件, 添加类似如下内容
# 切换到root用户
su root #1. ===最大可创建文件数太小=======
vim /etc/security/limits.conf
# 在文件末尾中增加下面内容
itheima soft nofile 65536
itheima hard nofile 65536
# =====
vim /etc/security/limits.d/20-nproc.conf
# 在文件末尾中增加下面内容
itheima soft nofile 65536
itheima hard nofile 65536
* hard nproc 4096
# 注:* 代表Linux所有用户名称 #2. ===最大虚拟内存太小=======
vim /etc/sysctl.conf
# 在文件中增加下面内容
vm.max_map_count=655360
# 重新加载,输入下面命令:
sysctl -p
7、启动elasticsearch
su itheima # 切换到itheima用户启动
cd /opt/elasticsearch-7.4.0/bin
./elasticsearch #启动
☀️2.1.2 Docker下部署
1、创建网络
因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络:
docker network create es-net
2、加载镜像
这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。不建议大家自己pull。
镜像的tar包文章头部可下载
大家将其上传到虚拟机中,然后运行命令加载即可:
# 导入数据
docker load -i es.tar
同理还有kibana
的tar包也需要这样做。
3、运行
运行docker命令,部署单点es:
docker run -d \--name es \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-e "discovery.type=single-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--network es-net \-p 9200:9200 \-p 9300:9300 \
elasticsearch:7.12.1
命令解释:
-e "cluster.name=es-docker-cluster"
:设置集群名称-e "http.host=0.0.0.0"
:监听的地址,可以外网访问-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
:内存大小-e "discovery.type=single-node"
:非集群模式-v es-data:/usr/share/elasticsearch/data
:挂载逻辑卷,绑定es的数据目录-v es-logs:/usr/share/elasticsearch/logs
:挂载逻辑卷,绑定es的日志目录-v es-plugins:/usr/share/elasticsearch/plugins
:挂载逻辑卷,绑定es的插件目录--privileged
:授予逻辑卷访问权--network es-net
:加入一个名为es-net的网络中-p 9200:9200
:端口映射配置
☀️2.1.3 访问elasticsearch
1、在访问elasticsearch前,请确保防火墙是关闭的,执行命令:
#暂时关闭防火墙
systemctl stop firewalld# 或者#永久设置防火墙状态
systemctl enable firewalld.service #打开防火墙永久性生效,重启后不会复原
systemctl disable firewalld.service #关闭防火墙,永久性生效,重启后不会复原
浏览器输入http://IP:9200/,如下图
此时elasticsearch已成功启动:
number" : "7.4.0" 表示elasticsearch版本
lucene_version" : "8.2.0" 表示lucene版本
name : 默认启动的时候指定了 ES 实例名称
cluster_name : 默认名为 elasticsearch
查看elastic是否启动
ps -ef|grep elastic
🦋2.2 ES辅助工具安装
☀️2.2.1 Postman安装
1、什么是Postman
Postman是一款广受欢迎的API开发工具。它提供了一个可视化的界面,使开发人员能够轻松地创建、发送和调试API请求,同时还包括了对响应进行断言和验证的功能。此外,Postman还支持多种协议,包括HTTP、HTTPS、RESTful、SOAP等。它可以帮助团队协作、监视API和模拟数据。Postman可在多种操作系统上运行,包括Windows、Mac OSX和Linux。
官网:https://www.postman.com/
☀️2.2.2 Kibana安装
🌈2.2.2.1 Liunx下安装
1、什么是Kibana
Kibana是一个开源的数据分析和可视化平台,它是Elastic Stack中的一员,可以与Elasticsearch、Logstash以及Beats等组件一起使用。Kibana提供了一个直观的Web界面来对Elasticsearch中的数据进行搜索、分析、可视化和管理。它支持多种图表类型和可视化选项,可以帮助用户更好地理解和分析他们的数据。Kibana还提供了可自定义的仪表盘功能,可以将多个可视化组合在一起,从而形成一个完整的数据分析与监控系统。
2、上传kibana
CRT中克隆一个窗口,上传Kibana
put E:\software\kibana-7.4.0-linux-x86_64.tar.gz
2、解压kibana
tar -xzf kibana-7.4.0-linux-x86_64.tar.gz -C /opt
解压到当前目录(/opt)下
3、修改kibana配置
vim /opt/kibana-7.4.0-linux-x86_64/config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
server.name: "kibana-itcast"
elasticsearch.hosts: ["http://127.0.0.1:9200"]
elasticsearch.requestTimeout: 99999
-
server.port:http访问端口
-
server.host:ip地址,0.0.0.0表示可远程访问
-
server.name:kibana服务名
-
elasticsearch.hosts:elasticsearch地址
-
elasticsearch.requestTimeout:请求elasticsearch超时时间,默认为30000,此处可根据情况设置
4、启动kibana
由于kibana不建议使用root用户启动,如果用root启动,需要加–allow-root参数
# 切换到kibana的bin目录
cd /opt/kibana-7.4.0-linux-x86_64/bin
# 启动
./kibana --allow-root
启动成功。
5、访问kibana
1.浏览器输入http://IP:5601/,如下图:
http://IP:5601/
看到这个界面,说明Kibanan已成功安装。
-
Discover
:可视化查询分析器 -
Visualize
:统计分析图表 -
Dashboard
:自定义主面板(添加图表) -
Timelion
:Timelion是一个kibana时间序列展示组件(暂时不用) -
Dev Tools
:Console控制台(同CURL/POSTER,操作ES代码工具,代码提示,很方便) -
Management
:管理索引库(index)、已保存的搜索和可视化结果(save objects)、设置 kibana 服务器属性。
后台启动
nohup ../bin/kibana &
🌈2.2.2.2 Docker下安装
1、部署
运行docker命令,部署kibana,同理先加载镜像: docker load -i kibana.tar,然后启动:
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601 \
kibana:7.12.1
--network es-net
:加入一个名为es-net的网络中,与elasticsearch在同一个网络中-e ELASTICSEARCH_HOSTS=http://es:9200"
:设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch-p 5601:5601
:端口映射配置
kibana启动一般比较慢,需要多等待一会,可以通过命令:
docker logs -f kibana
查看运行日志,当查看到下面的日志,说明成功:
此时,在浏览器输入地址访问:http://IP:5601,即可看到结果
☀️2.2.3 head安装
Elasticsearch的head是一种可视化管理工具,用于管理Elasticsearch集群的健康状态、索引、文档、节点和分片等信息。它可以通过浏览器访问,并提供用户友好的界面,让用户可以方便地执行各种操作,例如搜索、过滤、排序、修改、删除等。head还支持导入和导出数据,以及自定义查询DSL。head是开源软件,可以通过GitHub获取源代码。
🌈2.2.3.1 Node安装
1、什么是Node
Node是一个基于Chrome V8引擎的JavaScript运行时环境,用于构建高效的网络应用程序。Node可以在服务器端运行JavaScript代码,并提供了许多内置模块,如文件系统、网络通信、加密等,使得开发者可以轻松地构建高性能的web应用。Node的特点包括非阻塞I/O和事件驱动的编程模型,使得它可以处理大量的并发请求,而不会导致程序阻塞。Node还拥有一个庞大的开源生态系统,许多流行的web框架和工具都可以在Node上使用。
2、下载Node
上一节我们已经安装好了Elasticsearch,接下来我们来安装head插件,由于elasticsearch-head插件是由nodejs语言编写,所以安装elasticsearch-head前需要先安装nodejs。
首先,执行以下命令安装nodejs和grunt
打开虚拟机,执行wget命令下载Node,如下图:
wget https://nodejs.org/dist/v10.15.2/node-v10.15.2-linux-x64.tar.xz
3、解压Node包
tar xvf node-v10.15.2-linux-x64.tar.xz
4、设置软连接
解压文件的 bin 目录底下包含了 node、npm 等命令,我们可以使用 ln 命令来设置软连接:
ln -s bin/npm /usr/local/bin/ln -s bin/node /usr/local/bin/
在/etc/profile中配置好path环境变量
vi ~/.bash_profileexport NODE_HOME=/opt/nodejs/node-v10.15.2-linux-x64export PATH=$PATH:$NODE_HOME/bin
保存退出,使文件生效
source ~/.bash_profile
查看node安装版本,执行 node -v 验证安装如下图:
🌈2.2.3.2 grunt安装
安装grunt(运行在Node.js上面的任务管理器(task runner)),为了获得Grunt的更多产品特性,需要全局安装Grunt’s 命令行接口(CLI),使用npm进行安装,如下:
npm install -g grunt-cli
查看grunt版本
输出grunt版本信息,表示安装成功。
🌈2.2.3.3 head安装
- 执行命令安装git
git yum install git -y
- 切换到/opt目录下,执行下面的克隆命令
git clone git://github.com/mobz/elasticsearch-head.git
- 进入到elasticsearch-head目录
cd elasticsearch-head
- 运行
在运行之前我们需要修改下elasticsearch.yml,因为ES默认不开启跨域访问,需要添加以下配置:
#开启cors跨域访问支持,默认为false
http.cors.enabled: true
#跨域访问允许的域名地址,(允许所有域名)以上使用正则
http.cors.allow-origin: "*"
然后开始执行运行命令:
npm run start
- 访问head
浏览器输入ip:port:9100,如下图
看到这个界面说明我们的head插件成功安装并且成功连接Elasticsearch。
🔎3.ElasticSearch核心概念
概念 | 描述 |
---|---|
索引(Index) | 包含多个文档的逻辑容器,类似于数据库中的表 |
文档(Document) | 一组字段(Key-Value)的集合,类似于数据库中的记录,每个文档都有一个唯一的ID |
字段(Field) | 文档中的每个键值对,类似于数据库中的列 |
映射(Mapping) | 定义了文档中的字段和它们在ElasticSearch中的类型,指定了每个索引中的文档应该如何被分析和存储 |
分片(Shard) | 将索引分成多个分片来分布式存储和处理数据。每个分片是一个独立的Lucene索引 |
副本(Replica) | 每个分片可以有多个副本,用于提高搜索和读取速度,以及实现高可用性 |
节点(Node) | ElasticSearch集群中的一个服务实例,可以存储和处理数据,参与搜索和聚合操作 |
集群(Cluster) | 一个或多个节点组成的逻辑集合,用于共同处理和存储数据,并提供搜索和聚合操作 |
搜索(Search) | 使用查询语句来检索文档的过程。查询可以包括搜索词、过滤条件、排序参数等 |
聚合(Aggregation) | 使用聚合语句来汇总和统计文档的过程。聚合可以包括计数、求和、平均、最大、最小等操作 |
🚀感谢:给读者的一封信
亲爱的读者,
我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。
如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。
我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。
如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。
再次感谢您的阅读和支持!
最诚挚的问候, “愚公搬代码”
这篇关于【愚公系列】2023年11月 Java教学课程 208-ElasticSearch(初识和安装)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!