=ElasticSearch REST API 全面指南:从基础到生产实践

一、ElasticSearch API 架构概述

ElasticSearch 提供了一套完整的 RESTful API 体系,基于 HTTP/HTTPS 协议,通过 9200 端口提供服务。API 设计遵循 REST 规范,支持 JSON 格式的请求和响应。

1. API 核心分类

API 类型 功能描述 生产环境应用场景
Cat API 提供简洁的文本格式集群信息 快速监控和故障排查
Cluster API 管理集群范围的操作和设置 集群健康检查、配置管理
Document API 文档级别的 CRUD 操作 业务数据增删改查
Search API 执行搜索和聚合操作 业务查询、数据分析
Index API 索引生命周期管理 索引创建、配置和删除
Nodes API 节点级别信息和统计 性能监控、资源调配

二、Cat API 深度解析

1. 核心监控端点

# 集群健康状态(生产环境推荐格式)
GET /_cat/health?v&format=json&pretty

# 节点资源使用情况(包含关键指标)
GET /_cat/nodes?v&h=name,ip,heap.percent,ram.percent,cpu,load_1m,node.role

# 索引分片分布详情
GET /_cat/shards?v&h=index,shard,prirep,state,docs,store,node&s=state

2. 生产环境实用参数

参数 作用 示例
v 显示列标题 /_cat/nodes?v
h 指定返回字段 &h=name,ip,heap.percent
format 设置响应格式(json/yaml等) &format=json
s 按字段排序 &s=heap:desc
bytes 数据大小显示格式 &bytes=gb

3. 关键监控指标说明

// 典型响应示例
[
  {
    "name": "node-1",
    "ip": "192.168.1.101",
    "heap.percent": "45",
    "ram.percent": "78",
    "cpu": "12",
    "load_1m": "2.15",
    "node.role": "dimr"  // d:data, i:ingest, m:master, r:remote_cluster_client
  }
]

三、Cluster API 生产实践

1. 集群健康诊断

# 深度健康检查(生产推荐)
GET /_cluster/health?level=indices&pretty

# 响应关键字段解析
{
  "cluster_name": "prod-cluster",
  "status": "green",  # 红/黄/绿状态
  "timed_out": false,
  "number_of_nodes": 8,
  "number_of_data_nodes": 6,
  "active_primary_shards": 420,
  "active_shards": 840,
  "relocating_shards": 0,  # 正在迁移的分片
  "initializing_shards": 0, # 初始化中的分片
  "unassigned_shards": 0,   # 未分配分片
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "task_max_waiting_in_queue_millis": 0
}

2. 集群状态分析

# 获取详细集群状态(谨慎使用,数据量大)
GET /_cluster/state?filter_path=metadata.indices.*.settings,master_node,nodes

# 常用过滤路径
?filter_path=metadata.indices.*.stat*
?filter_path=routing_table.indices.*.shards.*.state

3. 生产环境关键操作

分片分配控制

# 临时禁用分片分配(维护时使用)
PUT /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}

# 排除故障节点
PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.exclude._ip": "192.168.1.100"
  }
}

四、Document API 最佳实践

1. 文档 CRUD 操作

# 创建/更新文档(自动生成ID)
POST /products/_doc
{
  "name": "Server Rack",
  "price": 899.99,
  "stock": 42
}

# 指定ID创建
PUT /products/_doc/1001
{
  "name": "Network Switch",
  "price": 2499.99
}

# 条件更新文档
POST /products/_update/1001
{
  "script": {
    "source": "ctx._source.stock -= params.quantity",
    "lang": "painless",
    "params": {
      "quantity": 2
    }
  }
}

2. 批量操作(Bulk API)

POST /_bulk
{ "index" : { "_index" : "products", "_id" : "1002" } }
{ "name": "SSD Drive", "price": 199.99 }
{ "create" : { "_index" : "products", "_id" : "1003" } }
{ "name": "Memory Module", "price": 129.99 }
{ "delete" : { "_index" : "products", "_id" : "1001" } }

性能提示:生产环境批量大小建议 5-15MB,根据网络延迟调整

五、Search API 高级应用

1. 复合查询示例

GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "name": "server" } }
      ],
      "filter": [
        { "range": { "price": { "gte": 500, "lte": 1000 } } },
        { "term": { "in_stock": true } }
      ],
      "should": [
        { "match": { "description": "rackmount" } }
      ],
      "minimum_should_match": 1
    }
  },
  "aggs": {
    "price_stats": {
      "stats": { "field": "price" }
    },
    "inventory_by_type": {
      "terms": { "field": "category.keyword" }
    }
  },
  "sort": [
    { "price": { "order": "desc" } }
  ],
  "from": 0,
  "size": 10
}

2. 搜索性能优化参数

参数 作用
preference 控制分片执行查询的位置(如_local
request_cache 启用查询缓存(适用于重复查询)
batched_reduce_size 控制分片结果分批处理大小
terminate_after 指定每个分片收集的最大文档数

六、生产环境API安全实践

1. 基础安全措施

# 启用HTTPS
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: certs/elastic-http.p12

# 请求认证
curl -u username:password -XGET 'https://es-cluster:9200/_cluster/health'

2. 限流保护

# 设置搜索限流(集群级别)
PUT /_cluster/settings
{
  "persistent": {
    "search.max_buckets": 10000,
    "indices.breaker.request.limit": "60%"
  }
}

# 索引级别限流
PUT /products/_settings
{
  "index.search.throttled": true
}

七、API性能监控

1. 慢日志配置

PUT /_settings
{
  "index.search.slowlog.threshold.query.warn": "10s",
  "index.search.slowlog.threshold.fetch.debug": "500ms"
}

2. 性能分析接口

# 查询性能分析
GET /products/_search?profile=true
{
  "query": { ... }
}

# 聚合性能分析
GET /products/_search
{
  "profile": true,
  "aggs": { ... }
}

本指南基于 Elasticsearch 7.x 版本编写,适用于生产环境部署。实际使用时请根据集群版本和具体业务需求调整 API 参数。建议结合 Kibana 的 Dev Tools 进行 API 测试和验证。

posted on 2025-03-25 17:29  Leo-Yide  阅读(17)  评论(0)    收藏  举报