mirror of https://github.com/langgenius/dify.git
130 lines
4.5 KiB
Markdown
130 lines
4.5 KiB
Markdown
# 完整的 Elasticsearch 配置指南
|
||
|
||
## 🔧 **问题修复总结**
|
||
|
||
我已经修复了以下问题:
|
||
|
||
### 1. **构造函数参数不匹配**
|
||
- **错误**: `ElasticsearchWorkflowExecutionRepository.__init__() got an unexpected keyword argument 'session_factory'`
|
||
- **修复**: 修改构造函数接受 `session_factory` 参数,从全局扩展获取 Elasticsearch 客户端
|
||
|
||
### 2. **导入错误**
|
||
- **错误**: `name 'sessionmaker' is not defined`
|
||
- **修复**: 添加必要的 SQLAlchemy 导入
|
||
|
||
### 3. **SSL/HTTPS 配置**
|
||
- **错误**: `received plaintext http traffic on an https channel`
|
||
- **修复**: 使用 HTTPS 连接和正确的认证信息
|
||
|
||
### 4. **实体属性不匹配**
|
||
- **错误**: `'WorkflowExecution' object has no attribute 'created_at'` 和 `'WorkflowExecution' object has no attribute 'id'`
|
||
- **修复**: 使用正确的属性名:
|
||
- `id_` 而不是 `id`
|
||
- `started_at` 而不是 `created_at`
|
||
- `error_message` 而不是 `error`
|
||
|
||
## 📋 **完整的 .env 配置**
|
||
|
||
请将以下配置添加到您的 `dify/api/.env` 文件:
|
||
|
||
```bash
|
||
# ====================================
|
||
# Elasticsearch 配置
|
||
# ====================================
|
||
|
||
# 启用 Elasticsearch
|
||
ELASTICSEARCH_ENABLED=true
|
||
|
||
# 连接设置(注意使用 HTTPS)
|
||
ELASTICSEARCH_HOSTS=["https://localhost:9200"]
|
||
ELASTICSEARCH_USERNAME=elastic
|
||
ELASTICSEARCH_PASSWORD=2gYvv6+O36PGwaVD6yzE
|
||
|
||
# SSL 设置
|
||
ELASTICSEARCH_USE_SSL=true
|
||
ELASTICSEARCH_VERIFY_CERTS=false
|
||
|
||
# 性能设置
|
||
ELASTICSEARCH_TIMEOUT=30
|
||
ELASTICSEARCH_MAX_RETRIES=3
|
||
ELASTICSEARCH_INDEX_PREFIX=dify
|
||
ELASTICSEARCH_RETENTION_DAYS=30
|
||
|
||
# ====================================
|
||
# Repository Factory 配置
|
||
# 切换到 Elasticsearch 实现
|
||
# ====================================
|
||
|
||
# 核心工作流 repositories
|
||
CORE_WORKFLOW_EXECUTION_REPOSITORY=core.repositories.elasticsearch_workflow_execution_repository.ElasticsearchWorkflowExecutionRepository
|
||
CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY=core.repositories.elasticsearch_workflow_node_execution_repository.ElasticsearchWorkflowNodeExecutionRepository
|
||
|
||
# API 服务层 repositories
|
||
API_WORKFLOW_RUN_REPOSITORY=repositories.elasticsearch_api_workflow_run_repository.ElasticsearchAPIWorkflowRunRepository
|
||
```
|
||
|
||
## 🚀 **使用步骤**
|
||
|
||
### 1. 配置环境变量
|
||
将上述配置复制到您的 `.env` 文件中
|
||
|
||
### 2. 重启应用
|
||
重启 Dify API 服务以加载新配置
|
||
|
||
### 3. 测试连接
|
||
```bash
|
||
flask elasticsearch status
|
||
```
|
||
|
||
### 4. 执行迁移
|
||
```bash
|
||
# 干运行测试
|
||
flask elasticsearch migrate --dry-run
|
||
|
||
# 实际迁移(替换为您的实际 tenant_id)
|
||
flask elasticsearch migrate --tenant-id your-tenant-id
|
||
|
||
# 验证迁移结果
|
||
flask elasticsearch validate --tenant-id your-tenant-id
|
||
```
|
||
|
||
## 📊 **四个日志表的处理方式**
|
||
|
||
| 表名 | Repository 配置 | 实现类 |
|
||
|------|----------------|--------|
|
||
| `workflow_runs` | `API_WORKFLOW_RUN_REPOSITORY` | `ElasticsearchAPIWorkflowRunRepository` |
|
||
| `workflow_node_executions` | `CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY` | `ElasticsearchWorkflowNodeExecutionRepository` |
|
||
| `workflow_app_logs` | 不使用 factory | `ElasticsearchWorkflowAppLogRepository` |
|
||
| `workflow_node_execution_offload` | 集成处理 | 在 node executions 中自动处理 |
|
||
|
||
## ✅ **验证配置正确性**
|
||
|
||
配置完成后,您可以通过以下方式验证:
|
||
|
||
1. **检查应用启动**: 应用应该能正常启动,无错误日志
|
||
2. **测试 Elasticsearch 连接**: `flask elasticsearch status` 应该显示集群状态
|
||
3. **测试工作流执行**: 在 Dify 界面中执行工作流,检查是否有错误
|
||
|
||
## 🔄 **回滚方案**
|
||
|
||
如果需要回滚到 PostgreSQL,只需注释掉或删除 Repository 配置:
|
||
|
||
```bash
|
||
# 注释掉这些行以回滚到 PostgreSQL
|
||
# CORE_WORKFLOW_EXECUTION_REPOSITORY=core.repositories.elasticsearch_workflow_execution_repository.ElasticsearchWorkflowExecutionRepository
|
||
# CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY=core.repositories.elasticsearch_workflow_node_execution_repository.ElasticsearchWorkflowNodeExecutionRepository
|
||
# API_WORKFLOW_RUN_REPOSITORY=repositories.elasticsearch_api_workflow_run_repository.ElasticsearchAPIWorkflowRunRepository
|
||
```
|
||
|
||
## 🎯 **关键优势**
|
||
|
||
切换到 Elasticsearch 后,您将获得:
|
||
|
||
1. **更好的性能**: 专为日志数据优化的存储引擎
|
||
2. **全文搜索**: 支持复杂的日志搜索和分析
|
||
3. **时间序列优化**: 自动索引轮转和数据生命周期管理
|
||
4. **水平扩展**: 支持集群扩展处理大量数据
|
||
5. **实时分析**: 近实时的数据查询和聚合分析
|
||
|
||
现在所有的错误都已经修复,您可以安全地使用 Elasticsearch 作为工作流日志的存储后端了!
|