ElasticSearch是大型架构核心,下面我详解ElasticSearch常用命令@mikechen
1. 查看集群健康状态
命令
GET /_cluster/health
或者:
curl http://localhost:9200/_cluster/health?pretty
返回结果
{
"cluster_name": "es-cluster",
"status": "green",
"number_of_nodes": 3
}
状态说明
| 状态 | 说明 |
|---|---|
| green | 主分片和副本分片正常 |
| yellow | 主分片正常,副本异常 |
| red | 主分片异常 |
这是排查问题时第一个要执行的命令。
2. 查看所有索引
命令
GET /_cat/indices?v
或者:
curl http://localhost:9200/_cat/indices?v
输出示例
health status index docs.count store.size
green open user 100000 50mb
可以查看:
- 索引名称
- 文档数量
- 存储空间
- 分片情况
3. 创建索引
命令
PUT /user
指定分片:
PUT /user
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
说明
生产环境必须提前规划:
- 分片数
- 副本数
- Mapping
避免后期扩容困难。
4. 删除索引
命令
DELETE /user
注意
删除后无法恢复。
线上建议:
- 快照备份
- 二次确认
- 禁止通配符误删
5. 查看索引Mapping
命令
GET /user/_mapping
作用
查看字段类型:
{
"name": {
"type": "text"
}
}
常用于排查:
- 分词异常
- 聚合失败
- 查询性能问题
6. 新增文档
命令
POST /user/_doc
{
"name":"Tom",
"age":20
}
返回:
{
"_id":"abc123"
}
ES自动生成ID。
7. 根据ID查询文档
命令
GET /user/_doc/abc123
返回
{
"_source": {
"name":"Tom",
"age":20
}
}
适合主键查询场景。
8. 更新文档
命令
POST /user/_update/abc123
{
"doc":{
"age":25
}
}
说明
只更新指定字段。
无需覆盖整个文档。
9. 删除文档
命令
DELETE /user/_doc/abc123
应用场景
- 用户注销
- 数据清理
- 历史数据归档
10. 全文检索
命令
GET /user/_search
{
"query": {
"match": {
"name": "Tom"
}
}
}
原理
先分词:
Tom Jackson
可能拆分为:
tom
jackson
再进行倒排索引匹配。
11. 条件过滤查询
命令
GET /user/_search
{
"query": {
"bool": {
"filter": [
{
"term": {
"age": 20
}
}
]
}
}
}
优势
filter:
- 不计算评分
- 可缓存
- 查询更快
线上推荐优先使用。
12. 聚合统计
命令
GET /user/_search
{
"size": 0,
"aggs": {
"avg_age": {
"avg": {
"field": "age"
}
}
}
}
返回
{
"aggregations": {
"avg_age": {
"value": 28.5
}
}
}
常用于:
- BI报表
- 数据统计
- 实时分析
13. Bulk批量写入
命令
POST /_bulk
{"index":{"_index":"user"}}
{"name":"Tom"}
{"index":{"_index":"user"}}
{"name":"Jack"}
优势
单条写入:
1000次网络请求
Bulk:
1次网络请求
性能提升通常可达:
10倍~100倍
因此日志系统、订单系统、大数据平台都会采用 Bulk 写入。