前面了解了Elasticsearch的一些基本概念,现在我们开始学习怎么使用Elasticsearch。在使用之前先需要准备一个Elasticsearch环境,我们需要使用到Elasticsearch及Kibana(Kibana 是为 Elasticsearch设计的开源分析和可视化平台)。这里我们使用docker-compose在Linux环境中安装一套Elasticsearch及Kibana。
前期准备
Docker Compose 是 Docker 官方提供的一种工具,用于定义和运行多个 Docker 容器的应用程序。它基于 Docker 命令行工具,提供了一个简单的 YAML 文件格式,用于定义多个容器之间的关系和配置,然后可以使用单个命令来启动、停止和管理这些容器。使用 Docker Compose,可以轻松地管理和部署一个复杂的应用程序。
安装docker
# 安装docker-ce版本
yum install -y docker-ce
# 启动docker并设置开机启动
systemctl enable --now docker
#查看docker版本
docker --version
最后能够正常显示docker版本即表示docker安装成功
安装docker-compose
curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
到这一步我们安装好了docker-compose环境,有了docker-compose我们可以快速的将Elasticsearch和Kibana安装完成。这里我们使用elasticsearch 7.11.2
Elasticsearch及Kibana安装
创建docker-compose文件
创建目录
mkdir -p /opt/elasticsearch && cd $_
vim docker-compose.yml
编写docker-compose.yml文件
version: '3'
services:
elasticsearch:
image: elasticsearch:7.11.2
container_name: elasticsearch
volumes:
- ./config:/usr/share/elasticsearch/config #esconfig持久化到本地
- ./plugins:/usr/share/elasticsearch/plugins
- ./data:/usr/shar/elasticsearch/data
environment:
- discovery.type=single-node
- TZ=Asia/shanghai
- ES_JAVA_OPTS= -Xms2g -Xmx2g # 设置 JVM 内存参数
ports:
- "9200:9200"
- "9300:9300"
restart: always
kibana:
image: kibana:7.11.2
container_name: kibana
depends_on: # 服务依赖
- elasticsearch
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200 # 指定elasticsearch地址
- elasticsearch.ssl.verify=false
- TZ=Asia/shanghai
ports:
- "5601:5601"
restart: always
使用 docker-compose up -d启动如图
到此我们就完成了Elasticsearch环境的安装工作
Elasticsearch基础操作
索引操作
1.创建索引
在Kibana控制台中输入如下命令,并执行,如果创建的索引名称已经存在,会返回错误信息。
PUT product-test
# 返回结果
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "product-test"
}
字段 | 含义 |
---|---|
acknowledged | 索引操作是否成功: true-成功,false-失败 |
shards_acknowledged | 是否已成功将操作应用于所有相关的分片 |
index | 索引名称 |
创建一个带有类型及字段的索引
PUT product-test
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"id": {
"type": "long"
},
"name": {
"type": "text"
},
"image": {
"type": "keyword"
},
"price": {
"type": "double"
},
"quantity":{
"type":"integer"
}
}
}
}
这里我们创建了一个分片数和副本数都为1的索引,里面包含5个字段: 商品名称(name),商品图片(image),商品价格(price), 库存数量(quantity),类型各不相同。
在实际使用中Elasticsearch的分片和副本数的选择应该考虑以下几个因素:
- 数据量:如果你的数据量很小,可以选择较少的分片和副本数。但如果数据量很大,就需要增加分片和副本数来提高搜索效率和可用性。
- 查询负载:如果你的查询负载很大,可以增加分片和副本数来分散查询负载,提高搜索效率。但如果查询负载很小,可以选择较少的分片和副本数。
- 硬件资源:分片和副本数的增加会占用更多的硬件资源,包括磁盘空间、内存和CPU等。因此,在选择分片和副本数时需要考虑硬件资源的限制。
- 可用性:增加副本数可以提高系统的可用性,因为当某个节点故障时,其他副本可以继续提供服务。但是,增加副本数也会占用更多的硬件资源。
综上所述,选择分片和副本数需要根据具体的业务需求和硬件资源来进行权衡。一般来说,建议在数据量较大、查询负载较高、硬件资源充足的情况下增加分片和副本数,以提高搜索效率和可用性。
2.查看索引
查看Es集群中所有索引信息使用如下命令
GET /_cat/indices?v
其中,GET
为HTTP请求方法,/_cat/indices
为API的路径,v
表示以表格形式输出结果,可以更清晰地查看索引的相关信息。
执行该请求后,Es会返回一个表格,包含当前集群中所有索引的相关信息,例如索引名称、状态、分片数、副本数、文档数、存储大小等。这些信息可以用于监控和管理集群中的索引。
#查看单个索引
GET product-test
# 返回结果
{
"product-test" : {
"aliases" : { },
"mappings" : { },
"settings" : {
"index" : {
"routing" : {
"allocation" : {
"include" : {
"_tier_preference" : "data_content"
}
}
},
"number_of_shards" : "1",
"provided_name" : "product-test",
"creation_date" : "1686209323359",
"number_of_replicas" : "1",
"uuid" : "gk1bWBr-SQSOdkikbqbZnA",
"version" : {
"created" : "7120099"
}
}
}
}
}
字段 | 含义 |
---|---|
aliases | 别名 |
number_of_shards | 主分片数量 |
number_of_replicas | 副本分片数量 |
version | 当前索引的版本,每一次修改,版本会跟着变化 |
获取索引中所有类型的字段信息
GET product-test/_mapping
#返回结果
{
"product-test" : {
"mappings" : {
"properties" : {
"name" : {
"type" : "text"
},
"picture_url" : {
"type" : "keyword"
},
"price" : {
"type" : "double"
},
"quantity" : {
"type" : "integer"
}
}
}
}
}
3.打开/关闭索引
#关闭索引
POST product-test/_close
#开启索引
POST product-test/_open
被关闭的索引是无法对索引的文档进行操作的
4.删除索引
DELETE product-test
#返回
{
"acknowledged" : true
}