Files
es-demo/README.md
mouseleee fc14798af5 feat: 增加ism管理接口
test: 索引模板和ism的单元测试和集成测试
2025-11-16 23:00:31 +08:00

267 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ES-Demo
OpenSearch/Elasticsearch 客户端实验项目,用于测试和验证 AWS OpenSearch Service 的各种功能和接口。
## 项目概述
这是一个用于实验 AWS OpenSearch Service 的 Go 项目。项目的主要目标是:
- 测试 OpenSearch 客户端的各种接口和功能
- 实现生产级别的代码质量
- 保持代码结构清晰、模块化
- 完备的测试覆盖
- 为未来转化为可复用的依赖库做准备
## 项目特点
- **生产级代码质量**:所有代码遵循 Go 官方最佳实践
- **模块化设计**:清晰的目录结构和职责划分
- **AI 辅助开发**:大部分代码由 AI 辅助生成,配合详细的指令文件
- **测试完备**:包含单元测试和集成测试
- **最新依赖**:使用最新版本的依赖库(除非有特殊需求)
## 技术栈
- **语言**: Go 1.25.3
- **OpenSearch 客户端**: opensearch-go/v2 v2.3.0
- **AWS SDK**: aws-sdk-go-v2 (config, aws/signer/v4)
- **环境变量**: godotenv v1.5.1
- **代码质量**: golangci-lint v1.64.8
- **测试框架**: Go 标准库 testing
## 项目结构
```text
es-demo/
├── README.md # 项目说明文档
├── .env.example # 环境变量配置示例
├── .gitignore # Git 忽略文件配置
├── .golangci.yml # golangci-lint 配置
├── test.ps1 # 测试流水线脚本Windows
├── go.mod # Go 模块依赖
├── go.sum # 依赖校验和
├── main.go # 程序入口
├── .github/
│ └── instructions/ # AI Agent 开发指令
│ ├── CLAUDE_GUIDELINE.instructions.md
│ └── DEV_GUIDELINE.instructions.md
├── config/ # 配置相关
│ ├── config.go # 全局配置,支持 .env 文件加载
│ └── config_test.go # 配置测试100% 覆盖率)
├── client/ # OpenSearch 客户端封装
│ ├── client.go # 客户端连接管理和 AWS 认证
│ └── client_test.go # 客户端测试
└── operations/ # 业务操作实现
├── cluster/ # 集群级别运维操作
│ ├── cluster.go # 集群信息查询
│ └── cluster_test.go # 集群操作测试
└── index/ # 索引级别业务操作
├── template.go # 索引模板管理CRUD
└── template_test.go # 模板操作测试
```
## 开发原则
### 代码质量要求
1. **遵循 Go 官方最佳实践**
- 使用 `gofmt` 格式化代码
- 遵循 [Effective Go](https://go.dev/doc/effective_go) 指南
- 遵循 [Go Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments)
- 使用 `go vet` 进行静态检查
- 使用 `golangci-lint` 进行代码检查
2. **命名规范**
- 包名:简短、小写、单数形式
- 接口名:单个方法接口以 `-er` 结尾
- 变量名:驼峰命名,缩写词全大写(如 `URL``ID`
- 常量:驼峰命名或全大写下划线分隔
3. **错误处理**
- 所有错误必须处理
- 使用有意义的错误信息
- 适当时使用 `errors.Is()``errors.As()`
- 可考虑使用 `fmt.Errorf()` 包装错误
4. **注释规范**
- 所有导出的类型、函数必须有注释
- 注释以类型或函数名开头
- 包注释放在 `package` 语句之前
### 非功能需求(起步阶段)
由于项目处于实验阶段,以下方面采用简化实现:
- **配置管理**:使用全局变量,简单的配置结构
- **日志系统**:基础的日志输出,可使用全局 logger
- **错误处理**:基本的错误返回和处理,暂不需要复杂的错误链
- **性能优化**:功能优先,性能问题后续优化
这些简化不影响代码的可读性和可维护性,为后续改进预留空间。
## 功能模块
### 已完成功能
#### 客户端连接 (client/)
- [x] OpenSearch 客户端初始化和连接管理
- [x] AWS v4 签名认证
- [x] 配置验证和错误处理
- [x] 支持 .env 文件配置加载
#### 集群运维操作 (operations/cluster/)
- [x] 获取集群信息GetInfo
- 集群名称、版本、UUID
- 节点数、分片数统计
#### 索引业务操作 (operations/index/)
- [x] 索引模板管理Index Templates
- PutTemplate: 创建/更新索引模板
- GetTemplate: 获取指定模板配置
- DeleteTemplate: 删除索引模板
- ListTemplates: 列出所有模板
- 模板配置验证
- [x] 索引生命周期策略管理ISM/ILM
- PolicyManager 接口:统一的策略管理抽象
- ISM 实现AWS OpenSearch Index State Management
- ILM 预留:未来支持 Elasticsearch Index Lifecycle Management
- PutPolicy: 创建/更新策略
- GetPolicy: 获取指定策略
- DeletePolicy: 删除策略
- ListPolicies: 列出所有策略
- 策略配置验证
### 待实现功能
以下功能将根据实际需求逐步实现:
- [ ] 索引管理(创建、删除、更新索引)
- [ ] 文档操作CRUD
- [ ] 搜索功能(基础查询、复杂查询)
- [ ] 聚合查询
- [ ] 批量操作
- [ ] 性能测试工具
## 快速开始
### 环境要求
- Go 1.25.3 或更高版本
- AWS 账号和 OpenSearch Service 实例
- AWS 访问凭证Access Key ID 和 Secret Access Key
### 安装依赖
```bash
go mod download
```
### 配置
[配置说明待补充]
### 运行
```bash
go run main.go
```
### 测试
#### 测试流水线(推荐)
使用自动化测试流水线,包含 Linting、Build、Test 和 Cleanup 四个阶段:
```powershell
# Windows PowerShell
powershell -ExecutionPolicy Bypass -File .\test.ps1
# 跳过特定阶段
powershell -ExecutionPolicy Bypass -File .\test.ps1 -SkipLint
powershell -ExecutionPolicy Bypass -File .\test.ps1 -SkipBuild
```
#### 手动测试
```bash
# 代码质量检查
golangci-lint run ./...
# 编译检查
go build -o NUL .
# 运行所有测试(跳过集成测试)
go test -v -short ./...
# 运行测试并显示覆盖率
go test -v -short -coverprofile=coverage.out ./...
go tool cover -func=coverage.out
# 生成 HTML 覆盖率报告
go tool cover -html=coverage.out -o coverage.html
```
**注意**: 使用 `-short` 标志跳过需要真实 OpenSearch 实例的集成测试。
## AI 辅助开发
本项目大量使用 AI 辅助开发,遵循严格的 TDD测试驱动开发流程。详细的开发指令请参考
- [开发准则](./.github/instructions/DEV_GUIDELINE.instructions.md) - Go 最佳实践、TDD 流程、测试流水线要求
- [Agent 执行协议](./.github/instructions/CLAUDE_GUIDELINE.instructions.md) - Agent 工作流程和执行约束
## 开发路线图
### 第一阶段:基础设施(已完成)
- [x] 项目初始化
- [x] 基础项目结构Client + Operations 架构)
- [x] OpenSearch 客户端封装连接管理、AWS 认证)
- [x] 基本测试框架(单元测试、集成测试分离)
- [x] 测试流水线自动化Lint → Build → Test → Cleanup
- [x] 代码质量保障golangci-lint 集成)
### 第二阶段:核心功能(进行中)
- [x] 集群运维操作GetInfo
- [x] 索引模板管理CRUD
- [ ] 索引管理功能(创建、删除、更新索引)
- [ ] 文档 CRUD 操作
- [ ] 基础搜索功能
- [ ] 完善测试覆盖
### 第三阶段:高级功能
- [ ] 聚合查询
- [ ] 批量操作优化
- [ ] 性能测试工具
- [ ] 错误处理优化
- [ ] 重试和容错机制
### 第四阶段:库化准备
- [ ] API 设计优化
- [ ] 完整文档
- [ ] 示例代码
- [ ] 发布为可复用库
## 贡献指南
由于本项目主要用于个人实验,暂不接受外部贡献。但欢迎提出建议和问题。
## 许可证
[待定]
## 联系方式
[待补充]
---
**注意**: 本项目处于积极开发中API 可能会发生变化。