# 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 可汉化且提供友好的可视化操作界面,支持索引和文档的增删改查及批量操作。
