简介
elasticsearch结合kibana、Logstash、Beast,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域。
数据抓取:Logstash、Beasts
存储、计算、搜索数据:Elasticsearch(底层是Lucene)
数据可视化:Kibana
Lucene:是一个java语言的搜索引擎类库。
正向索引和倒排索引
正向索引:传统数据库采用正向索引,例如给表的ID创建索引。查询某个词条时必须先找到文档(一条数据)再判定是否包含对应词条。
倒排索引:对文档内容分词,对词条创建索引,并记录词条所在文档的信息,查询时先根据词条查询文档id,而后获取文档。
elasticsearch采用倒排索引:
- 文档(doucument):每条数据就是一个文档
- 词条(term):文档按照语义分成的词语。
将普通数据,按条进行分词,记录成词条。遇见相同分词时,追加文档id。
eg:
原数据:小米手机、华为手机。
小米手机,先按条进行分词
形成
| 词条 | 文档id |
|---|---|
| 小米 | 1 |
| 手机 | 1 |
然后:华为手机
| 词条 | 文档id |
|---|---|
| 小米 | 1 |
| 手机 | 1,2 |
| 华为 | 1 |
这样词条就是唯一的,针对词条创建索引。
如搜索【华为手机】
- 得到两个词条【华为】、【手机】
- 然后去倒排索引中查找。
| 词条 | 文档id |
|---|---|
| 手机 | 1,2 |
| 华为 | 1 |
- 得到对应文档id,同时文档id1含有所有词条,排序就可以靠前。
- 根据文档id,再到对应文档中查询,并将结果存入结果集。
文档
elasticsearch是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。
文档数据会被序列化为json格式后存储到elasticsearch中。
索引
索引:相同类型的文档的集合。不同类型放到不同的索引下。
映射:索引中文档的字段约束信息,类似表的结构结束。
| db | es | 说明 |
|---|---|---|
| table | index | index就是文档的集合,类似于数据库的table |
| row | document | document就是一条条数据,类型数据库的row,但文档都是json文档 |
| column | field | field就是json文档中字段,类型数据库中的列 |
| schema | mapping | mapping是索引中文档的约束,如字段类型约束,类似数据库的表结构 |
| sql | DSL | DSL是es提供的json风格请求语句,用来操作es,实现CRUD(sql基于connection,es基于HTTP请求) |
ES擅长数据的搜索、分析、计算。
DB擅长事件类型操作、确保数据的安全和一致性。
所以一般增、删、改的操作还是操作DB,读的交给ES。
安装ES、kibana
此处不用docker-compose,而使用单独部署ES,所以要创建网络用于ES与kinana使用。
# 创建网络 docker network create es-net # 加载镜像(可以pull,也可以load本地)
部署启动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
ES_JAVA_OPTS:配置JVM堆内存大小,ES是基于JAVA实现的。
discovery.type:单点模式。
es-data:ES数据保存目录。
es-plugins:ES插件保存目录。
privileged::授予逻辑卷访问权
network es-net:让ES加入到网络中。
9200:http访问端口。
9300:ES各节点互联端口。
如果报错
WARNING: IPv4 forwarding is disabled. Networking will not work.
按下面解决
vi /etc/sysctl.conf systemctl restart network && systemctl restart docker #重启网络与docker docker rm xxx #删除容器 略 #重新部署运行容器
网页访问,展示一堆json,证明启动成功
安装kibana
pull拉取,或load加载本地
docker load -i kibana.tar
部署运行kibana
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在同一个网络中
ELASTICSEARCH_HOSTS:设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
版本:版本最好和ES同一个版本。
kibana启动慢,可以通过命令
查看到Server running at http://0.0.0.0:5601 一般就是启动完成
docker logs -f kibana
访问网页,选择自己配置
选择Dev Tools(用于发送DSL语句)



