Elasticsearch
Public Agent Skills for Terminal and Kubernetes
npx -y skills add chaterm/terminal-skills --skill elasticsearchAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Elasticsearch 集群管理
SKILL.md
7.4 KB, as published. Nobody here has run it
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 | _cluster/health, _cat/shards |
| 分片未分配 | _cluster/allocation/explain |
| 查询慢 | _nodes/hot_threads, Profile API |
| 磁盘满 | _cat/allocation, 清理旧索引 |
| 内存不足 | _nodes/stats, 调整 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"