1、ES 基本概念介绍
1.1 ES 是什么
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎。
1.2 ES 主要功能
数据存储、数据搜索、数据分析。
2、ES 相关术语
2.1 文档 Document
Document 文档就是用户存在 es 中的数据,它是 es 中存储的最小单元。(类似于表中的一行数据)
注意:每个文档都有一个唯一的 ID 表示,可以自行指定,如果不指定 es 会自动生成。
2.2 索引 Index
索引其实是一堆文档 Document 的集合。(它类似数据库的中的一个表)
在一个索引中,会有多个文档,而每个文档是由多个不同类型的字段拼接在一起的。
2.3 字段 Filed
在 ES 中,Document 就是一个 Json Object,一个 Json Object 其实是由多个字段组成的,每个字段它有不同的数据类型。
- 字符串:text、keyword。
- 数值型:long,integer,short,byte,double,float
- 布尔:boolean
- 二进制:binary
- 范围类型:integer_range,float_range,long_range,double_range,date_range
2.4 ES 术语总结
ES 索引、文档、字段关系小结:
一个索引里面存储了很多的 Document 文档,一个文档就是一个 Json Object,一个 Json Object 是由多个不同或相同的 filed 字段组成。
3、ES 操作方式
ES 的操作和我们传统的数据库操作不太一样,它是通过 Restful API 方式进行操作的,其实本质上就是通过 HTTP 的方式去变更我们的资源状态:
- 通过 URI 指定要操作的资源,比如 Index、Document;
- 通过 Http Method 指定要操作的方法,如 GET、POST、PUT、DELETE;
常见操作 ES 的两种方式:Curl、Kibana DevTools
3.1 ES 单节点部署
3.1.1 CentOS 系列
# 1、安装 Java 环境
[root@es-node1 ~]# yum install java-17-openjdk java-17-openjdk-devel
# 2、安装 ES
[root@es-node1 ~]# rpm -ivh elasticsearch-8.18.2-x86_64.rpm
# 3、关闭 ES 默认开启的 Security 认证
[root@es-node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
# Enable security features
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
# 4、修改 ES 的 JVM 堆内存
[root@es-node1 ~]# vim /etc/elasticsearch/jvm.options
-Xms1g
-Xmx1g
# 5、启动 ES 单节点
[root@es-node1 ~]# systemctl enable --now elasticsearch
# 6. 端口验证
[root@es-node1 ~]# netstat -nltp
# 9200 <= HTTP 通信端口
# 9300 <= 内部集群通信端口
# 7、访问 ES
[root@es-node1 ~]# curl localhost:9200
访问 ES 正常返回结果:
{
"name" : "es-node01.oldwang.net",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "HJlIqvnXQx2KfPzttxcA7A",
"version" : {
"number" : "8.18.2",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "16cc90cd2d08a3147ce02b07e50894bc060a4cbf",
"build_date" : "2099-04-05T14:45:26.420424304Z",
"build_snapshot" : false,
"lucene_version" : "9.10.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
3.1.2 Ubuntu 系列
# 1. 安装 Java 环境
[root@es-node1 ~] apt update
[root@es-node1 ~] apt install -y openjdk-17-jdk
# 2. 安装 Elasticsearch
[root@es-node1 ~] wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.18.2-amd64.deb
[root@es-node1 ~] dpkg -i elasticsearch-8.18.2-amd64.deb
# 3. 关闭 ES 默认开启的 Security 认证
[root@es-node1 ~] vim /etc/elasticsearch/elasticsearch.yml
# 修改以下内容
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
# 4. 修改 ES 的 JVM 堆内存
[root@es-node1 ~] vim /etc/elasticsearch/jvm.options
# 修改
-Xms1g
-Xmx1g
# 5. 启动 ES 单节点
[root@es-node1 ~] systemctl enable --now elasticsearch
# 6. 端口验证
[root@es-node1 ~] ss -nltp
# 9200 <= HTTP 通信端口
# 9300 <= 内部集群通信端口
# 7. 访问 ES
[root@es-node1 ~] curl localhost:9200
访问 ES 正常返回结果:
{
"name" : "es-node1.wang.org",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "xQUmZCMTQ7Ohi3TB25H0Yw",
"version" : {
"number" : "8.18.2",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "c6b8d8d951c631db715485edc1a74190cdce4189",
"build_date" : "2025-05-23T10:07:06.210694702Z",
"build_snapshot" : false,
"lucene_version" : "9.12.1",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
3.2 Curl 命令操作 ES
# 1、使用 Curl 命令来创建索引, 录入一份文档
[root@es-node1 ~]# curl -XPUT 'http://localhost:9200/oldwang_index/_doc/1' \
-H "Content-Type: application/json" \
-d '{
"name":"oldwang",
"age":18,
"salary": 1000000
}'
# 2、使用 Curl 命令来查看录入的数据
[root@es-node1 ~]# curl -XGET 'http://localhost:9200/oldwang_index/_doc/1'
查看数据返回结果:
{"_index":"oldwang_index","_id":"1","_version":1,"_seq_no":0,"_primary_term":1,"found":true,"_source":{
"username": "oldwang",
"age": 18,
"salary": 1000000
}}
3.3 安装 Kibana 操作 ES
3.3.1 CentOS 系列
# 1、安装 kibana
[root@es-node1 ~]# rpm -ivh kibana-8.18.2-x86_64.rpm
# 2、配置 Kibana
[root@es-node1 ~]# vim /etc/kibana/kibana.yml
# 配置内容:
server.port: 5601 # kibana 默认监听端口
server.host: "0.0.0.0" # kibana 监听地址段
server.name: "kibana-node" # kibana 实例名称
server.publicBaseUrl: "http://kibana.oldwang.net" # Kibana 的公共 URL, 例如分享链接、API 调用等都会使用该地址
elasticsearch.hosts: ["http://localhost:9200"] # kibana 从 coordinating 节点获取数据(此处 ES. Kibana 属同节点, 因此填写 localhost; 正常应该填写 ES 服务器地址)
i18n.locale: "zh-CN" # kibana 汉化
# 3、启动 kibana
[root@es-node1 ~]# systemctl enable kibana --now
3.3.2 Ubuntu 系列
# 1、安装 kibana
[root@kibana ~]# dpkg -i kibana-8.18.2-amd64.deb
# 2、配置 Kibana
[root@kibana ~]# vim /etc/kibana/kibana.yml
# 配置内容:
server.port: 5601 # kibana 默认监听端口
server.host: "0.0.0.0" # kibana 监听地址段
server.name: "kibana-node" # kibana 实例名称
server.publicBaseUrl: "http://192.168.80.150" # Kibana 的公共 URL, 例如分享链接、API 调用等都会使用该地址 (推荐使用域名地址)
elasticsearch.hosts: ["http://192.168.80.151:9200"] # 此处填写 ES 服务器地址, kibana 从 coordinating 节点获取数据
i18n.locale: "zh-CN" # kibana 汉化
# 3、启动 kibana
[root@kibana ~]# systemctl enable kibana --now
3.4 访问 Kibana
访问地址:http://192.168.80.150:5601
3.5 启用堆栈监测(或 安装 Metricbeat 实现)
操作路径:Management > 堆栈监测 > 使用内部收集设置 > 打开 Monitoring
4、索引 API
ES 有专门的 Index API,用于创建、更新、删除索引配置等。
操作入口:Management > 开发工具
4.1 创建索引
创建索引相关 API:
# 创建索引
PUT /oldwang_index
# 查看所有已存在的索引
GET _cat/indices
# 查看健康状态
GET _cat/health
# 查看节点主机
GET _cat/nodes
使用方式:在 Kibana 开发工具中输入需要运行的命令,单击运行发送请求。
4.2 删除索引
删除索引 API:
# 删除索引
DELETE /oldwang_index
4.3 查看索引
使用 Kibana 查看索引路径:Stack Management > 索引管理 > 索引
5、文档 API
ES 为索引添加文档,有专门的 Document API:
- 创建文档
- 查询文档
- 更新文档
- 删除文档
5.1 创建文档
创建文档(指定 ID)
# 创建一个文档 (指定ID)
POST /oldwang_index/_doc/1
{
"username": "oldwang",
"age": 18,
"salary": 1000000
}
说明:创建文档时,如果索引不存在,ES 会自动创建对应的 index 和 type。
创建文档(不指定 ID)
# 创建文档,不指定 ID(id 会生成随机字符串)
POST /oldwang_index/_doc
{
"username": "oldwang",
"age": 18,
"salary": 1000000
}
5.2 查询文档
查询指定 ID 文档
GET /oldwang_index/_doc/1
查询所有文档
GET /oldwang_index/_search
查询指定内容
GET /oldwang_index/_search
{
"query": {
"match": {
"username": "oldwang"
}
}
}
5.3 批量创建文档
ES 允许通过 _bulk 一次创建多个文档,从而减少网络传输开销,提升写入速率。
# 批量创建 Document
POST _bulk
{"index":{"_index":"tt","_id":"1"}}
{"name":"oldwang","age":"18"}
{"create":{"_index":"tt","_id":"2"}}
{"name":"oldqiang","age":"30"}
{"delete":{"_index":"tt","_id":"2"}}
{"update":{"_id":"1","_index":"tt"}}
{"doc":{"age":"20"}}
5.4 批量查询文档
ES 允许通过 _mget 一次查询多个文档。
# 批量查询 Document
GET _mget
{
"docs": [
{
"_index": "tt",
"_id": "1"
},
{
"_index": "tt",
"_id": "2"
}
]
}
总结
- ES 核心概念:文档是最小存储单元(对应数据库行)、索引是文档集合(对应数据库表)、字段是文档的属性且有多种数据类型。
- ES 操作核心:基于 RESTful API,可通过 Curl 命令行或 Kibana 可视化工具操作,核心 HTTP 方法包括 PUT/GET/POST/DELETE。
- 部署与使用:CentOS/Ubuntu 系统均支持 ES 和 Kibana 部署,Kibana 可汉化且提供友好的可视化操作界面,支持索引和文档的增删改查及批量操作。
