章节目录:
- 一、Elasticsearch简介
- 二、基本概念
- 2.1 索引、类型、文档
- 2.2 与Mysql概念映射
- 2.3 倒排索引
- 三、安装Es与可视化工具Kibana
- 3.1 镜像下载
- 3.2 Es文件挂载
- 3.3 启动Elasticsearch
- 3.4 启动Kibana
- 3.5 设置自启动
- 四、结束语
一、Elasticsearch简介
全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称
Elastic
)是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。Elastic 的底层是开源库
Lucene
。但是,你没法直接用Lucene
,必须自己写代码去调用它的接口。Elastic
是Lucene
的封装,提供了REST API
的操作接口,开箱即用。
二、基本概念
2.1 索引、类型、文档
- Index(索引):
- Elastic 会索引所有字段,经过处理后写入一个反向索引(
Inverted Index
)。查找数据的时候,直接查找该索引。所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。 - 它是单个数据库的同义词。每个
Index
(即数据库)的名字必须是小写。
- Type(类型):
- 在 Index(索引)中,可以定义一个或多个类型,类似于 MySQL 的 Table,每一种类型的数据存放在一起。
- 注意:在Elasticsearch6.0之后,Type 类型被移除!
- 原因如下:
- 在关系型数据库中table是独立的(独立存储),但es中同一个
index
中不同type
是存储在同一个索引中的(lucene
的索引文件),因此不同type
中相同名字的字段的定义(mapping
)必须一致。 - 不同类型的“记录”存储在同一个
index
中,会影响lucene
的压缩性能。 - 基于
index
的统计,一个type下的文档分数会影响其它type
下的分数。
- Document(文档):
- 保存在某个
Index
(索引)下,某种 Type(类型)的一个数据,Document
(文档)是JSON
格式的,Document
就像是MySQL
中某个Table
里面每一行的数据,字段就是Document
里的属性。
2.2 与Mysql概念映射
2.3 倒排索引
正排索引:是以文档对象的唯一ID作为索引,以文档内容作为记录的结构。
倒排索引:
Inverted index
,指的是将文档内容中的单词作为索引,将包含该词的文档ID作为记录的结构。有了倒排索引,能快速、灵活地实现各类搜索需求。整个搜索过程中我们不需要做任何文本的模糊匹配。
三、安装Es与可视化工具Kibana
3.1 镜像下载
# 存储和检索数据
$ docker pull elasticsearch:7.4.2
# 可视化检索数据
$ docker pull kibana:7.4.2
3.2 Es文件挂载
# 创建配置文件目录
$ mkdir -p /mydata/elasticsearch/config
# 创建数据目录
$ mkdir -p /mydata/elasticsearch/data
# 将/mydata/elasticsearch/文件夹中文件都可读可写
$ chmod -R 777 /mydata/elasticsearch/
# 配置任意机器可以访问 elasticsearch
$ echo "http.host: 0.0.0.0" >/mydata/elasticsearch/config/elasticsearch.yml
3.3 启动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
- 参数说明:
-
-p 9200:9200 -p 9300:9300
:向外暴露两个端口,9200用于HTTP REST API
请求,9300 ES 在分布式集群状态下 ES 之间的通信端口。 -
-e "discovery.type=single-node"
:es 以单节点运行。 -
-e ES_JAVA_OPTS="-Xms64m -Xmx512m"
:设置启动占用内存,不设置可能会占用当前系统所有内存。 - -v:挂载容器中的配置文件、数据文件、插件数据到本机的文件夹。
-
-d elasticsearch:7.6.2
:指定要启动的镜像。
- 状态查看:访问 IP:9200 看到返回的
json
数据说明启动成功。
3.4 启动Kibana
$ docker run --name kibana \
-e ELASTICSEARCH_HOSTS=http://yourIP:9200 \
-p 5601:5601 \
-d kibana:7.4.2
- 状态查看:访问 IP:5601。
3.5 设置自启动
# Es自启动
$ docker update elasticsearch --restart=always
# kibana自启动
$ docker update kibana --restart=always