kettle7.0写入elasticsearch6.3.2

kettle7.0写入elasticsearch6.3.2插件

之前写了5.x的插件,但是6.x的api改动也较大,主要介绍改动部分,源码更改编译见前篇。

客户端获取,ElasticSearchBulk中
private TransportClient client;

private void initClient() throws UnknownHostException {
    Settings.Builder settingsBuilder = Settings.builder();
    settingsBuilder.put( Settings.Builder.EMPTY_SETTINGS ); // keep default classloader
    //---------------changed---------------//
    Map<String, String> kv = meta.getSettingsMap();
    //不支持直接put map,遍历出来,再put
    for (Map.Entry<String, String> entry : kv.entrySet()) {  
        settingsBuilder.put( entry.getKey(),entry.getValue() );
    }

     Settings settings = settingsBuilder.build();
    // 注意client为TransportClient;没有node,删掉所有node的获取与关闭
     client = new PreBuiltTransportClient(settings);
    if ( !meta.servers.isEmpty() ) {

        for ( ElasticSearchBulkMeta.Server s : meta.servers ) {
          client.addTransportAddress( s.getAddr() );
        }
      }
    }
索引与集群的管理,ElasticSearchBulkDialog中
          AdminClient admin = client.admin();

          switch ( testType ) {
            case INDEX:
              if ( StringUtils.isBlank( tempMeta.getIndex() ) ) {
                showError( BaseMessages.getString( PKG, "ElasticSearchBulk.Error.NoIndex" ) );
                break;
              }
              // First check to see if the index exists

              IndicesExistsRequestBuilder indicesExistBld = admin.indices().prepareExists( tempMeta.getIndex() );
              IndicesExistsResponse indicesExistResponse = indicesExistBld.execute().get();
              if ( !indicesExistResponse.isExists() ) {
                showError( BaseMessages.getString( PKG, "ElasticSearchBulkDialog.Error.NoIndex" ) );
                return;
              }

              RecoveryRequestBuilder indicesBld = admin.indices().prepareRecoveries( tempMeta.getIndex() );
              //---------------changed---------------//
              ActionFuture<RecoveryResponse> execute = indicesBld.execute();
              // 分片数量的获取
              String shards = "" + execute.get().getSuccessfulShards() + "/" + execute.get().getTotalShards();
              showMessage( BaseMessages.getString( PKG, "ElasticSearchBulkDialog.TestIndex.TestOK", shards ) );
              break;
            case CLUSTER:
                //---------------changed---------------//
                ClusterHealthResponse healths = admin.cluster().prepareHealth().get(); 
                 //集群名称与节点数的获取
                String clusterName = healths.getClusterName();                 
                int numberOfNodes = healths.getNumberOfNodes();
              showMessage( BaseMessages.getString( PKG, "ElasticSearchBulkDialog.TestCluster.TestOK", clusterName, numberOfNodes ) );
              break;
            default:
              break;
          }

源码及插件见:链接: https://pan.baidu.com/s/1yEjLaWJZLcMElGtKYKXtug 密码: pb8j

不指定id字段时会报错:an id must be provided if version type or value are set
解决方法见:https://blog.csdn.net/ukakasu/article/details/82422700

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值