# Elasticsearch

[English](./README.md) | [中文](./README.zh.md)

此服务用于部署 Elasticsearch，一个分布式搜索和分析引擎。

## 服务

- `elasticsearch`：Elasticsearch 服务

## 环境变量

| 变量名                                  | 说明                                  | 默认值           |
| --------------------------------------- | ------------------------------------- | ---------------- |
| `ELASTICSEARCH_VERSION`                 | Elasticsearch 镜像版本                | `9.4.2`          |
| `ELASTICSEARCH_HTTP_PORT_OVERRIDE`      | HTTP 主机端口映射（映射到端口 9200）  | `9200`           |
| `ELASTICSEARCH_TRANSPORT_PORT_OVERRIDE` | 传输层主机端口映射（映射到端口 9300） | `9300`           |
| `ELASTICSEARCH_CLUSTER_NAME`            | Elasticsearch 集群名称                | `docker-cluster` |
| `ELASTICSEARCH_DISCOVERY_TYPE`          | 单节点设置的发现类型                  | `single-node`    |
| `ELASTICSEARCH_SECURITY_ENABLED`        | 启用 X-Pack 安全功能                  | `false`          |
| `ELASTICSEARCH_SSL_ENABLED`             | 启用 SSL/TLS                          | `false`          |
| `ELASTICSEARCH_HEAP_SIZE`               | JVM 堆大小                            | `1g`             |

请根据实际需求修改 `.env` 文件。

## 卷

- `elasticsearch_data`：Elasticsearch 数据目录
- `elasticsearch_logs`：Elasticsearch 日志目录
- `./elasticsearch.yml`：可选的自定义 Elasticsearch 配置文件

## 使用方法

1. 启动服务：

   ```bash
   docker compose up -d
   ```

2. 等待 Elasticsearch 就绪：

   ```bash
   docker compose logs -f elasticsearch
   ```

3. 测试连接：

   ```bash
   curl http://localhost:9200
   ```

## 基本操作

```bash
# 检查集群健康状态
curl http://localhost:9200/_cluster/health

# 列出所有索引
curl http://localhost:9200/_cat/indices?v

# 创建索引
curl -X PUT "localhost:9200/my-index"

# 索引文档
curl -X POST "localhost:9200/my-index/_doc" \
  -H "Content-Type: application/json" \
  -d '{"name": "John Doe", "age": 30}'

# 搜索文档
curl -X GET "localhost:9200/my-index/_search" \
  -H "Content-Type: application/json" \
  -d '{"query": {"match_all": {}}}'
```

## 内存配置

Elasticsearch 需要足够的内存才能有效运行。默认配置分配 1GB 堆内存。对于生产环境，请考虑：

- 将 `ELASTICSEARCH_HEAP_SIZE` 设置为可用 RAM 的 50%（但不超过 31GB）
- 确保主机至少有 2GB 可用 RAM
- 适当配置交换内存

## 健康检查

该服务包含健康检查，用于验证 Elasticsearch 集群健康状态。

## 安全提示

- 此配置禁用了安全功能以便于开发
- 生产环境请启用 X-Pack 安全、SSL/TLS 和身份验证
- 配置适当的网络安全和防火墙规则
- 定期备份索引并更新 Elasticsearch 版本
