ElasticSearch从入门到精通,史上最全(持续更新,未完待续,每天一点点)_Null的博客-CSDN博客_elasticsearch入门
一 Elasticsearch 简介
1 概述
ElasticSearch:智能搜索,分布式的搜索引擎
是ELK的一个组成,是一个产品,而且是非常完善的产品,ELK代表的是:E就是ElasticSearch,L就是Logstach,K就是kibana
E:EalsticSearch 搜索和分析的功能
L:Logstach 搜集数据的功能,类似于flume(使用方法几乎跟flume一模一样),是日志收集系统
K:Kibana 数据可视化(分析),可以用图表的方式来去展示,文不如表,表不如图,是数据可视化平台
2 优点
1.分布式搜索的功能
2、数据高可用,集群高可用
3.API更简单
4.API更高级。
5.支持的语言很多
6.支持PB级别的数据
7.完成搜索的功能和分析功能
基于Lucene,隐藏了Lucene的复杂性,提供简单的API
ES的性能比HBase高,咱们的竞价引擎最后还是要存到ES中的。
3 作用
1)全文检索:
类似 select * from product where product_name like '%牙膏%'
类似百度效果(电商搜索的效果)
2)结构化搜索:
类似 select * from product where product_id = '1'
3)数据分析
类似 select count (*) from product
4 搜索引擎原理
- 反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
- 搜索引擎原理就是建立反向索引。
- Elasticsearch 在 Lucene 的基础上进行封装,实现了分布式搜索引擎。
- Elasticsearch 中的索引、类型和文档的概念比较重要,类似于 MySQL 中的数据库、表和行。
- Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。
- Elasticsearch 一个典型应用就是 ELK 日志分析系统。
二 Docker搭建ES集群
1 关闭防火墙
后面我们要使用多个端口,为了避免繁琐的开放端口操作,我们关掉防火墙
# 关闭防火墙
systemctl stop firewalld.service
# 禁用防火墙
systemctl disable firewalld.service
2 安装Docker
我们使用 Docker 来运行 Elasticsearch,首先安装 Docker,参考下面笔记:
3 下载 Elastic Search 镜像
docker pull elasticsearch:7.9.3
4 集群部署结构
在一台服务器上,使用Docker部署三个ES容器组成的集群.
5 准备服务器
- 克隆 docker-base: es 并 给虚拟机内存设置成2G或以上
- 修改系统底层参数,粘贴键在编辑栏中,再 重启服务器: shutdown -r now
-
必须修改系统参数
max_map_count
,否则 Elasticsearch 无法启动:在
/etc/sysctl.conf
文件中添加vm.max_map_count=262144
echo 'vm.max_map_count=262144' >>/etc/sysctl.conf
- 设置ip:
./ip-static
ip: 192.168.64.181
ifconfig
- 上传文件到/root
- 导入镜像
docker load -i es-img.gz
6 准备虚拟网络和挂载目录
# 创建虚拟网络
docker network create es-net
# node1 的挂载目录
mkdir -p -m 777 /var/lib/es/node1/plugins
mkdir -p -m 777 /var/lib/es/node1/data
# node2 的挂载目录
mkdir -p -m 777 /var/lib/es/node2/plugins
mkdir -p -m 777 /var/lib/es/node2/data
# node3 的挂载目录
mkdir -p -m 777 /var/lib/es/node3/plugins
mkdir -p -m 777 /var/lib/es/node3/data
7 启动 Elasticsearch 集群
- node1:
docker run -d \
--name=node1 \
--restart=always \
--net es-net \
-p 9200:9200 \
-p 9300:9300 \
-v /var/lib/es/node1/plugins:/usr/share/elasticsearch/plugins \
-v /var/lib/es/node1/data:/usr/share/elasticsearch/data \
-e node.name=node1 \
-e node.master=true \
-e network.host=node1 \
-e discovery.seed_hosts=node1,node2,node3 \
-e cluster.initial_master_nodes=node1 \
-e cluster.name=es-cluster \
-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \
elasticsearch:7.9.3
- node2:
docker run -d \
--name=node2 \
--restart=always \
--net es-net \
-p 9201:9200 \
-p 9301:9300 \
-v /var/lib/es/node2/plugins:/usr/share/elasticsearch/plugins \
-v /var/lib/es/node2/data:/usr/share/elasticsearch/data \
-e node.name=node2 \
-e node.master=true \
-e network.host=node2 \
-e discovery.seed_hosts=node1,node2,node3 \
-e cluster.initial_master_nodes=node1 \
-e cluster.name=es-cluster \
-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \
elasticsearch:7.9.3
- node3:
docker run -d \
--name=node3 \
--restart=always \
--net es-net \
-p 9202:9200 \
-p 9302:9300 \
-v /var/lib/es/node3/plugins:/usr/share/elasticsearch/plugins \
-v /var/lib/es/node3/data:/usr/share/elasticsearch/data \
-e node.name=node3 \
-e node.master=true \
-e network.host=node3 \
-e discovery.seed_hosts=node1,node2,node3 \
-e cluster.initial_master_nodes=node1 \
-e cluster.name=es-cluster \
-e "ES_JAVA_OPTS=-Xms256m -Xmx256m" \
elasticsearch:7.9.3
- 环境变量说明:
参考 Networking | Elasticsearch Guide [7.15] | Elastic
8 查看启动结果结果
http://192.168.64.181:9200/_cat/nodes
9 chrome浏览器插件:elasticsearch-head
elasticsearch-head 项目提供了一个直观的界面,可以很方便地查看集群、分片、数据等等。elasticsearch-head最简单的安装方式是作为 chrome 浏览器插件进行安装。
- 在 elasticsearch-head 项目仓库中下载 chrome 浏览器插件
- https://github.com/mobz/elasticsearch-head/raw/master/crx/es-head.crx
- 将文件后缀改为 zip
- 解压缩
- 在 chrome 浏览器中选择“更多工具”–“扩展程序”
- 在“扩展程序”中确认开启了“开发者模式”
- 点击“加载已解压的扩展程序”
- 选择前面解压的插件目录
- 在浏览器中点击 elasticsearch-head 插件打开 head 界面,并连接 http://192.168.64.181:9200/
三 IK中文分词器
1 安装 ik 分词器--相当于字典匹配中文词
- 从 ik 分词器项目仓库中下载 ik 分词器安装包,下载的版本需要与 Elasticsearch 版本匹配:
https://github.com/medcl/elasticsearch-analysis-ik
- 或者可以访问 gitee 镜像仓库:
https://gitee.com/mirrors/elasticsearch-analysis-ik
- 下载 elasticsearch-analysis-ik-7.9.3.zip 复制到 /root/ 目录下,前面这一文件已经导入
2 在三个节点上安装 ik 分词器
cd ~/
# 复制 ik 分词器到三个 es 容器
docker cp elasticsearch-analysis-ik-7.9.3.zip node1:/root/
docker cp elasticsearch-analysis-ik-7.9.3.zip node2:/root/
docker cp elasticsearch-analysis-ik-7.9.3.zip node3:/root/
# 在 node1 中安装 ik 分词器
docker exec -it node1 elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-7.9.3.zip
# 在 node2 中安装 ik 分词器
docker exec -it node2 elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-7.9.3.zip
# 在 node3 中安装 ik 分词器
docker exec -it node3 elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-7.9.3.zip
# 重启三个 es 容器
docker restart node1 node2 node3
注意:执行安装分词器命令时,按一次enter键即可,多按会导致安装失败,需要重新安装
3 查看安装结果
- 在浏览器中访问 http://192.168.64.181:9200/_cat/plugins
- 如果插件不可用,可以卸载后重新安装:
docker exec -it node1 elasticsearch-plugin remove analysis-ik
docker exec -it node2 elasticsearch-plugin remove analysis-ik
docker exec -it node3 elasticsearch-plugin remove analysis-ik
4 ik分词测试
ik分词器提供两种分词器: ik_max_word 和 ik_smart
ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query;
ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。
5 ik_max_word
分词测试
使用 head 执行下面测试:
向 http://192.168.64.181:9200/_analyze
路径提交 POST
请求,并在协议体中提交 Json 数据:
{
"analyzer":"ik_max_word",
"text":"中华人民共和国国歌"
}
6 ik_smart
分词测试
使用 head 执行下面测试:
向 http://192.168.64.181:9200/_analyze
路径提交 POST
请求,并在协议体中提交 Json 数据:
{
"analyzer":"ik_smart",
"text":"中华人民共和国国歌"
}