install
source · Clone the upstream repo
git clone https://github.com/chaterm/terminal-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/chaterm/terminal-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/database/elasticsearch" ~/.claude/skills/chaterm-terminal-skills-elasticsearch && rm -rf "$T"
manifest:
database/elasticsearch/SKILL.mdsource content
Elasticsearch 集群管理
概述
Elasticsearch 索引管理、查询 DSL、集群运维等技能。
集群管理
集群状态
# 集群健康 curl -X GET "localhost:9200/_cluster/health?pretty" # 集群状态 curl -X GET "localhost:9200/_cluster/state?pretty" # 集群统计 curl -X GET "localhost:9200/_cluster/stats?pretty" # 节点信息 curl -X GET "localhost:9200/_nodes?pretty" curl -X GET "localhost:9200/_nodes/stats?pretty" # 分片分配 curl -X GET "localhost:9200/_cat/shards?v" curl -X GET "localhost:9200/_cat/allocation?v"
Cat API
# 常用 cat 命令 curl -X GET "localhost:9200/_cat/health?v" curl -X GET "localhost:9200/_cat/nodes?v" curl -X GET "localhost:9200/_cat/indices?v" curl -X GET "localhost:9200/_cat/shards?v" curl -X GET "localhost:9200/_cat/segments?v" curl -X GET "localhost:9200/_cat/count?v" curl -X GET "localhost:9200/_cat/recovery?v" curl -X GET "localhost:9200/_cat/thread_pool?v"
索引管理
索引操作
# 创建索引 curl -X PUT "localhost:9200/my_index" -H 'Content-Type: application/json' -d' { "settings": { "number_of_shards": 3, "number_of_replicas": 1 }, "mappings": { "properties": { "title": { "type": "text" }, "content": { "type": "text" }, "timestamp": { "type": "date" }, "status": { "type": "keyword" } } } }' # 删除索引 curl -X DELETE "localhost:9200/my_index" # 查看索引 curl -X GET "localhost:9200/my_index?pretty" curl -X GET "localhost:9200/my_index/_mapping?pretty" curl -X GET "localhost:9200/my_index/_settings?pretty" # 索引别名 curl -X POST "localhost:9200/_aliases" -H 'Content-Type: application/json' -d' { "actions": [ { "add": { "index": "my_index_v2", "alias": "my_index" } }, { "remove": { "index": "my_index_v1", "alias": "my_index" } } ] }'
索引设置
# 修改设置 curl -X PUT "localhost:9200/my_index/_settings" -H 'Content-Type: application/json' -d' { "index": { "number_of_replicas": 2 } }' # 关闭/打开索引 curl -X POST "localhost:9200/my_index/_close" curl -X POST "localhost:9200/my_index/_open" # 刷新索引 curl -X POST "localhost:9200/my_index/_refresh" # 强制合并 curl -X POST "localhost:9200/my_index/_forcemerge?max_num_segments=1"
文档操作
CRUD
# 创建文档 curl -X POST "localhost:9200/my_index/_doc" -H 'Content-Type: application/json' -d' { "title": "Hello World", "content": "This is a test document", "timestamp": "2024-01-15T10:00:00" }' # 指定 ID 创建 curl -X PUT "localhost:9200/my_index/_doc/1" -H 'Content-Type: application/json' -d' { "title": "Document 1" }' # 获取文档 curl -X GET "localhost:9200/my_index/_doc/1?pretty" # 更新文档 curl -X POST "localhost:9200/my_index/_update/1" -H 'Content-Type: application/json' -d' { "doc": { "title": "Updated Title" } }' # 删除文档 curl -X DELETE "localhost:9200/my_index/_doc/1" # 批量操作 curl -X POST "localhost:9200/_bulk" -H 'Content-Type: application/json' -d' {"index":{"_index":"my_index","_id":"1"}} {"title":"Doc 1"} {"index":{"_index":"my_index","_id":"2"}} {"title":"Doc 2"} '
查询 DSL
基础查询
# 匹配所有 curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d' { "query": { "match_all": {} } }' # 全文搜索 curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d' { "query": { "match": { "content": "search text" } } }' # 精确匹配 curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d' { "query": { "term": { "status": "published" } } }' # 范围查询 curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d' { "query": { "range": { "timestamp": { "gte": "2024-01-01", "lte": "2024-01-31" } } } }'
复合查询
# Bool 查询 curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d' { "query": { "bool": { "must": [ { "match": { "title": "elasticsearch" } } ], "filter": [ { "term": { "status": "published" } }, { "range": { "timestamp": { "gte": "2024-01-01" } } } ], "should": [ { "match": { "content": "tutorial" } } ], "must_not": [ { "term": { "status": "draft" } } ] } } }'
聚合查询
# 聚合 curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d' { "size": 0, "aggs": { "status_count": { "terms": { "field": "status" } }, "avg_score": { "avg": { "field": "score" } }, "date_histogram": { "date_histogram": { "field": "timestamp", "calendar_interval": "day" } } } }'
备份与恢复
# 注册快照仓库 curl -X PUT "localhost:9200/_snapshot/my_backup" -H 'Content-Type: application/json' -d' { "type": "fs", "settings": { "location": "/backup/elasticsearch" } }' # 创建快照 curl -X PUT "localhost:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true" # 查看快照 curl -X GET "localhost:9200/_snapshot/my_backup/_all?pretty" # 恢复快照 curl -X POST "localhost:9200/_snapshot/my_backup/snapshot_1/_restore" -H 'Content-Type: application/json' -d' { "indices": "my_index", "rename_pattern": "(.+)", "rename_replacement": "restored_$1" }' # 删除快照 curl -X DELETE "localhost:9200/_snapshot/my_backup/snapshot_1"
常见场景
场景 1:重建索引
# Reindex curl -X POST "localhost:9200/_reindex" -H 'Content-Type: application/json' -d' { "source": { "index": "old_index" }, "dest": { "index": "new_index" } }' # 带查询条件 curl -X POST "localhost:9200/_reindex" -H 'Content-Type: application/json' -d' { "source": { "index": "old_index", "query": { "term": { "status": "active" } } }, "dest": { "index": "new_index" } }'
场景 2:分片迁移
# 排除节点 curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "transient": { "cluster.routing.allocation.exclude._name": "node_to_remove" } }' # 取消排除 curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "transient": { "cluster.routing.allocation.exclude._name": null } }'
场景 3:性能优化
# 禁用刷新(批量导入时) curl -X PUT "localhost:9200/my_index/_settings" -H 'Content-Type: application/json' -d' { "index": { "refresh_interval": "-1" } }' # 恢复刷新 curl -X PUT "localhost:9200/my_index/_settings" -H 'Content-Type: application/json' -d' { "index": { "refresh_interval": "1s" } }'
故障排查
| 问题 | 排查方法 |
|---|---|
| 集群 RED | , |
| 分片未分配 | |
| 查询慢 | , Profile API |
| 磁盘满 | , 清理旧索引 |
| 内存不足 | , 调整 JVM |
# 分片未分配原因 curl -X GET "localhost:9200/_cluster/allocation/explain?pretty" # 热点线程 curl -X GET "localhost:9200/_nodes/hot_threads" # 任务列表 curl -X GET "localhost:9200/_tasks?detailed=true&actions=*search"