本篇文章是 ElasticSearch 这个热门技术的基础知识手册,一共 20 张图,1.5w字,图文结合,代码讲解。欢迎大家,点赞、收藏,更多相关优质文章可以点击下面的链接,都是此类的干货。
下面是本文章的目录,可以先收藏、转发,有空在看。
ElasticSearch 入门
新增数据
查询数据
更新数据
删除数据
批量操作
ElasticSearch 高级使用
聚合操作
映射操作
分词操作
Spring Boot 整合 ElasticSearch
...
本篇文章的内容均以 Docker 环境为基础。
首先拉取镜像:
docker pull elasticsearch:7.4.2
然后下载kibana,这是一个可视化检索数据的工具:
docker pull kibana:7.4.2
创建两个文件夹用作数据卷:
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
创建一个配置文件并写入配置,使得外部机器能够访问 elasticsearch:
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
这样就可以启动 elasticsearch 了:
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-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
其中开放的 9200
端口为向elasticsearch发送请求的端口,而 9300
为集群环境下elasticsearch之间互相通信的端口;"discovery.type=single-node"
表示以单节点运行elasticsearch;ES_JAVA_OPTS="-Xms64m -Xmx128m"
用于指定elasticsearch的内存占用,而且必须指定,否则elasticsearch将占用系统的全部内存;最后设置elasticsearch的挂载点。
若是启动报错:
"Caused by: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes",
这是因为我们的挂载点权限不足导致的,此时修改挂载点权限重新启动elasticsearch即可:
chmod 777 /mydata/elasticsearch/data/
然后启动 Kibana:
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://www.ithui.top:9200 -p 5601:5601 -d kibana:7.4.2
启动完成后访问 http://www.ithui.top:5601/:
ElasticSearch 入门
ElasticSearch 通过接收请求的方式来对数据进行处理,接下来对elasticsearch进行一个简单的入门。首先是 _cat
请求,通过该请求能够查询elasticsearch的一些基本信息,具体如下:
GET /_cat/nodes:查看所有节点
GET /_cat/health:查看elasticsearch的健康状况
GET /_cat/master:查看主节点
GET /_cat/indices:查看所有索引
比如查看 elasticsearch 的所有节点,则需要发送 http://www.ithui.top/_cat/nodes 请求,结果如下:
若是想查看 elasticsearch 的健康状态,则发送 http://www.ithui.top:9200/_cat/health 请求,结果如下:
新增数据
elasticsearch通过接收PUT和POST请求来新增数据,然而在新增数据之前,我们需要来了解elasticsearch中的几个概念:
索引
类型
文档
属性
我们可以类比一下mysql中的概念来更形象地理解它们。在mysql中,若是想保存一条数据,我们首先需要创建数据库,然后在数据库中创建数据表,最后将数据作为一条记录插入数据表;而elasticsearch中的索引就相当于mysql中的数据库,类型就相当于数据表,文档就相当于一条记录。
所以,若是想在elasticsearch中新增一条数据,我们就需要指定这条数据放在哪个索引的哪个类型下,该条数据也被称为一个文档,而且这些数据是json格式的,json中的键被称为属性。
在elasticsearch中新增一条数据我们有更加专业的说法,称其为 索引一个文档
,接下来就可以发送一个请求 http://www.ithui.top:9200/customer/external/1 ,该请求表示向customer索引下的external文档存放一个标识为1的数据,数据可以存放在请求体中携带过去:
我们来分析一下该请求的返回结果:
{
"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
其中以 _
开头的属性称为元数据,它表示的是elasticsearch中的基本信息,比如 _index
表示当前索引;_type
表示当前类型;_id
表示当前数据的标识;_version
表示版本;result
表示当前操作的状态,这里是新建状态,若是索引的文档已经存在,则状态为更新状态。
PUT请求方式同样也能够新增数据,然而它与POST有些许不同,POST能够不携带id进行数据的保存,比如: