背景
随着时间的推进,es里面的索引文件越来越大。要想保住系统的效率,就必须要分索引、分路由。那么问题来了,目前项目上采用的是Spoon7.1进行数据更新,这样就存在以下问题:
1、利用spoon连es时,索引的名称不支持动态变量?
2、抽取数据时,对es里不存在的索引,spoon会自动生成,但不能生成我想要的mapping?
3、抽取到es,spoon不能指定文档插入的路由?
分析
针对第二点:可以利用es的template功能,设定模板,利用spoon往es里抽取时,不存在的索引会自动生成。生成索引的时候会按照我们设置的模板进行生成,包括mapping。
针对第一点:利用现有的功能,没有找到怎么实现。
针对第三点:对于es2.0之前的版本,可以设置按照文档的某个字段进行自动路由,但之后的版本不支持。
结论:要么不用工具,要么改造工具。比较了以下,后者工作量较小一点,确定这个为最终目标。
插件改造
1、kettle spoon整个项目都是开源的,可以去github上下载你想改造的版本。然后就是漫长的本地部署,一定要注意下载的源码版本号要和安装版的版本号一致。这个过程可以参考:
2、分析plugins/elasticsearch-bulk-insert-plugin下的源代码,如果改造的话,这里会涉及到改造
ElasticSearchBulkDialog.java和ElasticSearchBulk.java文件。具体细节就不详述了。
3、修改后编译整个目录,然后将这两个文件的编译文件替换到elasticsearch-bulk-insert-plugin-7.0.0.0-25.jar下
4、改造的结果如下:
工程实施(简单示例)
1、创建索引模板template_user,创建userindex开头的索引都会采取以下配置。
请求地址:localhost:9200/_template/template_user
请求类型:put
请求参数:
{
"template" : "userindex*",
"settings" : {
"number_of_shards" : 1,
"number_of_replicas": 0
},
"mappings" : {
"usertype": {
"properties": {
"date": {
"format": "strict_date_optional_time||epoch_millis",
"type": "date"
},
"sfzh": {
"index": "not_analyzed",
"type": "string"
},
"ryxm": {
"index": "not_analyzed",
"type": "string"
},
"type": {
"type": "string"
}
}
}
}
}
2、创建spoon转换,每个月的数据都存放在“userindex+年月”索引,user路由下。
3、建立job,每隔10s抽取一次数据
4、点击执行。修改计算机的时间,调整月份,会发现会自动创建索引,数据也全部在user路由下面。如图:
备注
1、es版本:2.3.2 spoon版本:7.1 ,下载地址请点击此处。
2、es插件改造后的jar包下载地址。链接:https://pan.baidu.com/s/1Sgiue867Rxro1cFAdMWEtQ 密码:ejnj
3、想看我其他关于es总结的,可以查看我的其他文章。