ElasticSearch的学习
简介
ElasticSearch是一个分布式的开源搜索和分析引擎,MySQL专攻于数据的持久化存储与管理(即CRUD),在真正要处理海量数据的检索与分析时,ElasticSearch是更胜一筹的,可以秒级地从海量数据中检索出需要需要的数据,而MySQL如果单表达到百万以上的数据再进行检索是非常慢的。
ElasticSearch功能有很多,包括各种检索功能(应用程序搜索、网站搜索、企业搜索)、对检索来的数据做处理分析(特别是日志处理和分析)、应用指标的监控、数据的分析和可视化等。
ElasticSearchm是目前全文搜索引擎的首选,可以快速地存储、搜索和分析海量数据。数据默认放在内存中
其底层是用以前Apache的开源库Lucene,对Lucene做了再一次的简化封装,直接提供REST API的操作接口,比如直接给ElasticSearch发请求就可以使用其复杂的检索功能。
一、基本概念
1、Index(索引)
动词,相当于MySQL中的insert,在MySQL中插入一条数据 = 在ElasticSearch中索引一条数据;
名词,相当于MySQL中的Database,MySQL中的库 = ElasticSearch的索引
2、Type(类型)【根据当前ES版本最新文档,“Before 7.0.0, the mapping definition included a type name. Elasticsearch 7.0.0 and later no longer accept a default mapping. See Removal of mapping types.”,类型已被移除。具体原因及解决见 Mapping 知识块】
在Index(索引)中,可以定义一个或多个类型;
类似于MySQL中的Table;每一种类型的数据放在一起
3、Document
保存在某个索引(Index)下,某种类型(Type)的一个数据(Document),文档是JSON格式的,Document就像是MySQL中的某个Table里面的内容(一条条的记录)
4、ElasticSearch概念 — 倒排索引机制
分词:将整句分拆为单词;
将拆分出来的单词和该单词出现的记录存放在ElasticSearch额外维护的倒排索引表中
检索:拆分检索的数据为单词,在倒排索引表中查询这些单词分别在哪些记录中
相关性得分,将相关性得分高的记录数据查出来
二、docker安装ElasticSearch
修改 Linux 网络设置
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-eth0 ifdown-bnep ifdown-isdn ifdown-sit ifup ifup-ippp ifup-plusb ifup-sit ifup-wireless
ifcfg-eth1 ifdown-eth ifdown-post ifdown-Team ifup-aliases ifup-ipv6 ifup-post ifup-Team init.ipv6-global
ifcfg-lo ifdown-ippp ifdown-ppp ifdown-TeamPort ifup-bnep ifup-isdn ifup-ppp ifup-TeamPort network-functions
ifdown ifdown-ipv6 ifdown-routes ifdown-tunnel ifup-eth ifup-plip ifup-routes ifup-tunnel network-functions-ipv6
[root@localhost network-scripts]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:4d:77:d3 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 83062sec preferred_lft 83062sec
inet6 fe80::5054:ff:fe4d:77d3/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:87:53:b1 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.10/24 brd 192.168.56.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe87:53b1/64 scope link
valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:da:49:0e:5c brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:daff:fe49:e5c/64 scope link
valid_lft forever preferred_lft forever
6: veth9f2577f@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 4a:e1:fa:70:da:a3 brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet6 fe80::48e1:faff:fe70:daa3/64 scope link
valid_lft forever preferred_lft forever
8: veth938fc84@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 2a:e1:8c:3b:bc:66 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::28e1:8cff:fe3b:bc66/64 scope link
valid_lft forever preferred_lft forever
12: vethb2c64c0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 0e:fa:e2:77:1a:62 brd ff:ff:ff:ff:ff:ff link-netnsid 3
inet6 fe80::cfa:e2ff:fe77:1a62/64 scope link
valid_lft forever preferred_lft forever
18: veth9f373db@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 1e:42:ad:3e:88:f2 brd ff:ff:ff:ff:ff:ff link-netnsid 2
inet6 fe80::1c42:adff:fe3e:88f2/64 scope link
valid_lft forever preferred_lft forever
[root@localhost network-scripts]# vi ifcfg-eth1
#VAGRANT-BEGIN
# The contents below are automatically generated by Vagrant. Do not modify.
NM_CONTROLLED=yes
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.56.10
NETMASK=255.255.255.0
GATEWAY=192.168.56.1 # 设置网关
DNS1=114.114.114.114 # 公共DNS,用于解析域名
DNS2=8.8.8.8
DEVICE=eth1
PEERDNS=no
#VAGRANT-END
[root@localhost network-scripts]# service network restart
修改 Linux 的 yum 源
- 备份原 yum 源
- 使用新 yum 源
- 生成缓存
[root@localhost network-scripts]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[root@localhost network-scripts]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1572 100 1572 0 0 3849 0 --:--:-- --:--:-- --:--:-- 3852
[root@localhost network-scripts]# yum makecache
Loaded plugins: fastestmirror
Determining fastest mirrors
base | 3.6 kB 00:00:00
docker-ce-stable | 3.5 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/11): base/7/x86_64/other_db | 2.6 MB 00:00:01
(2/11): base/7/x86_64/filelists_db | 7.2 MB 00:00:01
(3/11): docker-ce-stable/7/x86_64/filelists_db | 24 kB 00:00:05
(4/11): extras/7/x86_64/filelists_db | 226 kB 00:00:00
(5/11): extras/7/x86_64/other_db | 134 kB 00:00:00
(6/11): extras/7/x86_64/primary_db | 225 kB 00:00:00
(7/11): updates/7/x86_64/primary_db | 5.6 MB 00:00:00
(8/11): updates/7/x86_64/other_db | 454 kB 00:00:00
(9/11): updates/7/x86_64/filelists_db | 3.4 MB 00:00:00
(10/11): docker-ce-stable/7/x86_64/other_db | 117 kB 00:00:01
(11/11): docker-ce-stable/7/x86_64/primary_db | 56 kB 00:00:09
Metadata Cache Created
1、下载镜像文件
docker pull elasticsearch:7.10.1 #存储和检索数据,相当于MySQL服务
docker pull kibana:7.10.1 #可视化检索数据,相当于SQLyog
两个镜像版本需统一
2、创建实例
1)、Elasticsearch
mkdir -p /mydata/elasticsearch/config
#将在docker容器中的ElasticSearch所有的配置文件信息都挂载在外面虚拟机中的/mydata/elasticsearch/config文件夹下,通过修改虚拟机/mydata/elasticsearch/config中配置文件的配置信息,就能修改docker容器中ElasticSearch的配置
mkdir -p /mydata/elasticsearch/data
#同样将ElasticSearch中的一些数据文件挂载在外面虚拟机中的/mydata/elasticsearch/data文件夹下。
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
#将http.host: 0.0.0.0写入elasticsearch.yml配置文件中,以便ElasticSearch可以让远程的任何机器进行访问
#如果在之后一部步启动elasticsearch容器报错,并无法通过浏览器访问elasticsearch的9200端口访问到信息,可以查看日志排查,如是文件权限问题,进行以下修改。也可以事先进行文件权限修改
docker logs elasticsearch #查看elasticsearch启动的日志
ll /mydata/elasticsearch/ #查看/mydata/elasticsearch/目录下的文件的权限,包括config、data、plugins
#发现三个文件都为drwxr-xr-x权限,文件所有人(这里是root用户)可读可写可执行rwx,文件所有组和其他人只有可读和可执行的权限r-x。
#解读drwxr-xr-x:
#第1位 d 代表文件类型,-:普通文件,d:目录文件,l:链接文件,b:设备文件,c:字符设备文件,p:管道文件
#第2-4位 rwx 代表文件所有者(属主)有可读可写可执行的权限
#第5-7位 r-x 代表文件所有组(属组,与属主同一组的用户)有可读可执行的权限
#第8-10位 r-x 代表其他人有可读可执行的权限
#r:可读,数字表示为4;w:可写,数字表示为2;x:可执行,数字表示为1。
chmod -R 777 /mydata/elasticsearch/ #chmod是修改权限的命令;-R是可选项,表示递归;777表示将任何用户任何组的权限改为可读可写可执行,对应了三