我们的应用经常需要添加检索功能,开源的Elasticsearch是目前全文检索引擎的首选。它可以快速的存储、搜索和分析海量数据。Elasticsearch是一个分布式搜索框架,提供RestfulAPI,底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resharding的功能。
The Elastic Stack,包括 Elasticsearch、Kibana、Beats和 Logstash (也称为ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch简称为ES,ES是一个开源的高扩展的分布式全文搜索引擎,是整个ElasticStack技术栈的核心。它可以近乎实时的存储、检索数据,本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
第一步:在Docker Hub中选择最新版本的elasticsearch镜像,如下图所示:
使用下述命令下载最新版本的elasticsearch镜像:
docker pull elasticsearch:8.5.1
第二步:使用下述命令单节点启动Elasticsearch服务:
- docker run --name elasticsearch -d \
- -e "discovery.type=single-node" \
- -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
- -p 9200:9200 \
- -p 9300:9300 \
- elasticsearch:8.5.1
参数说明:
-e "discovery.type=single-node":表示以单节点启动Elasticsearch服务
-e ES_JAVA_OPTS="-Xms512m -Xmx512m":Xms表示设置堆内存的初始大小,Xmx表示设置堆内存的最大大小
-p 9200:9200:表示ES节点与外部通讯使用的端口,它是http协议的RESTful接口(各种CRUD操作都是走的该端口,如查询:http://localhost:9200/user/_search)。
-p 9300:9300:表示ES节点之间通讯使用的端口,它是tcp通讯端口,集群间和TCP client都走的它。
第三步:Elasticsearch服务启动以后,如果直接在宿主机中使用 curl 127.0.0.1:9200 命令去访问Elasticsearch服务的话,则会报下述提示:
我们可以通过Portainer先找到Elasticsearch容器内配置文件的绝对路径为:
/usr/share/elasticsearch/config
使用docker cp命令将容器内的/usr/share/elasticsearch路径下的config目录拷贝到宿主机的/home/elasticsearch目录下:
docker cp elasticsearch:/usr/share/elasticsearch/config /home/elasticsearch
此时我们就可以看见容器内的config目录已经完整拷贝进了宿主机的/home/elasticsearch目录下。
第四步:停止并删除已创建容器
- docker stop elasticsearch
- docker rm elasticsearch
第五步:将/home/elasticsearch/config目录下的elasticsearch.yml文件中的xpack.security.enable配置项的值设置为false
第六步: 将宿主机的配置文件夹挂载到容器内,再次启动Elasticsearch容器
- docker run --name elasticsearch -d \
- -e "discovery.type=single-node" \
- -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
- -p 9200:9200 \
- -p 9300:9300 \
- -v /home/elasticsearch/config:/usr/share/elasticsearch/config \
- elasticsearch:8.5.1
这里稍微提示一下哈,Elasticsearch服务的启动没有那么快,需要稍微等一会。
浏览器中访问192.168.1.108:9200,其返回内容如下所示,这里包含了Elasticsearch的版本信息:
此时说明Elasticsearch服务已经安装成功了!!!
Elasticsearch是面向文档型的NoSQL数据库,一条数据在这里就是一个文档。为了方便理解,我们将Elasticsearch里存储文档数据和关系型数据库MySQL存储数据的概念进行一个类比。
ES里的Index可以看做一个库,而Types相当于表,Documents则相当于表的行。
这里Types 的概念已经被逐渐弱化,Elasticsearch 6.X中,一个Index下已经只能包含一个type,Elasticsearch 7.X中Type的概念已经被删除了。
Elasticsearch采用的是倒排索引!!!
对比关系型数据库,创建索引就等同于创建数据库。在Postman中,向ES服务器发PUT请求:
http://192.168.1.108:9200/shopping
PUT请求具有幂等性!!!
在Postman中,向ES服务器发GET请求查看某一个索引: