# es-manager
**Repository Path**: lan-cat/es-manager
## Basic Information
- **Project Name**: es-manager
- **Description**: 学习flyway的思路做的es版本管理工具
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-11-09
- **Last Updated**: 2025-11-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# es-manager
#### 介绍
在您使用es的过程中肯定会遇到这样的问题,第一版项目已经上线了,接下来的几次内部迭代中,索引结构变更了几次,这个时候要么自己写代码让其升级,或者手扶升级,这个过程及其容易出问题,这个时候就可以使用es-manager来帮你管理
------不适合大数据量索引使用
## 如何使用
### 第一步,引入依赖
```python
com.lanmao
es-manager-core
0.1.0-SNAPSHOT
```
如果需要将数据源存放在关系型数据库(目前仅支持mysql和pgsql),则引入如下依赖
```python
com.lanmao
es-manager-db
0.1.0-SNAPSHOT
```
### 第二步,yml配置
```yaml
es:
upgrade:
enabled: true #是否启用es自动升级工具 默认为true
count: 1 #保留索引版本数量,默认为1,只有多版本策略才生效
dir: indices #索引mapping文件存放目录,默认为recourse下的indices目录
strategy: multi_version #升级策略,默认为multi_version
db_type: elasticsearch #元数据存储位置,默认为elasticsearch
```
es.upgrade.strategy 索引升级策略,目前支持三种
> multi_version:多版本升级策略,升级数据迁移一次,例如 mb_0.1.0 -> mb_0.1.1;支持回滚,保留指定版本数量
> one_migration:gc回收似平滑升级策略,升级数据迁移一次,例如 mb->mb_s0,下一次升级即是mb_s0->mb
> two_migration:数据迁移两次,例如mb->mb_s0,mb_s0->mb,性能较差
es.upgrade.db_type 元数据存储的数据库类型,目前支持三种
> elasticsearch:默认选项,元数据存储到用户当前连接的es上(不支持es8+版本),优势是无需引入第二种存储,缺陷是查看不方便
> mysql:元数据存储到用户连接的mysql数据库上,优势是直观
> postgresql:同mysql
### 第三步,创建目录
在indices目录下创建一个用于版本管理的目录,例如0.1.0_init,版本为0.1.0,描述为init(不支持v0.1.0_init形式)
### 第四步,添加索引
将需要被管理的索引添加到目录下面,例如test.json,test是索引名,内容是索引mapping
到此,配置完毕!
## 使用必看!!
#### 1、索引结构变更,索引新增需要升级如何操作?
新添加一个目录,版本号大于之前发布的版本,将需要新增或者升级的索引放到目录下即可,如下图
#### 2、版本比较规则
0.1.0<0.1.1
0.1.0<0.2.0
0.1.0<1.0.0
### 3、升级失败如何排查
首先看日志,日志会给出详细的错误原因;
或者看数据库es_index_log表,表中失败的索引都会记录错误原因,排查结束后重启项目即可
### 4、我使用的是多版本策略,我想回滚到上一个版本,怎么操作呢
索引版本记录存在于es_index_log表中,需要保留多版本才支持回滚(es.upgrade.count>1),目前提供了索引回滚的方法,如下图
### 5、使用过程中可以切换策略么?
目前支持使用过程中将two_migration、one_migration切换到multi_version
one_migration:当且仅当所有需要被管理的索引名为xxx时(非xxx.s0形式)
two_migration:无缝切换,无需做任何处理
### 6、支持集群部署吗?
暂不支持