进击的大数据(十三)数据工厂模块开发——java下的elasticsearch操作

项目我上传到github中,感兴趣的可以下载下来看看,希望大神可以在以后多多指点。

github代码地址:https://github.com/sjctt/spartacus

数据工厂模块主要功能是:将接收模块缓存到redis中的数据,进行基础分析后生成elasticsearch索引。

模块命名:spartacus_datafactory

关于springboot项目的创建,可以参考之前的文章:https://blog.csdn.net/FormatWindowsXP/article/details/108284275

1. pom.xml添加ES驱动

<!-- elasticsearch需要的jar -->
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>7.2.0</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.2.0</version>
</dependency>
		
<dependency>  
    <groupId>org.nlpcn</groupId>  
    <artifactId>elasticsearch-sql</artifactId>  
    <version>2.3.5.0</version>  
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.7</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.7</version>
</dependency>
<!-- elasticsearch需要的jar结束 -->

2.ES操作对象封装

工厂模块只需要创建索引

package com.data.operate;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Properties;

import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig.Builder;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

import spartacus_public.method.spartacus_debug;

import org.elasticsearch.client.RestClientBuilder.HttpClientConfigCallback;
import org.elasticsearch.client.RestClientBuilder.RequestConfigCallback;

/**
 * @author Song
 * @category
 * @serial
 *【2019年8月12日】	建立对象
 */
public class es_dop 
{
	//#region 连接搜索引擎
	public RestHighLevelClient es_connection()
	{
		try 
		{
			InputStream is = getClass().getClassLoader().getResourceAsStream("config/es.Properties");
			Properties properties = new Properties();
			properties.load(is);
			String es_host = properties.getProperty("es_host");
			int es_port = Integer.parseInt(properties.getProperty("es_port"));
			String es_schema = properties.getProperty("es_schema");
			final int es_connectTimeOut = Integer.parseInt(properties.getProperty("es_connectTimeOut"));
			final int es_socketTimeOut = Integer.parseInt(properties.getProperty("es_socketTimeOut"));
			final int es_connectionRequestTimeOut = Integer.parseInt(properties.getProperty("es_connectionRequestTimeOut"));
			final int es_maxConnectNum = Integer.parseInt(properties.getProperty("es_maxConnectNum"));
			final int es_maxConnectPerRoute = Integer.parseInt(properties.getProperty("es_maxConnectPerRoute"));
			
			ArrayList<HttpHost> hostList = new ArrayList<HttpHost>();
			String[] hosts = es_host.split(",");
			for (String host : hosts) 
			{
				hostList.add(new HttpHost(host,es_port,es_schema));
			}
			
			RestClientBuilder builder = RestClient.builder(hostList.toArray(new HttpHost[0]));
			//异步httpclient连接延时配置
			builder.setRequestConfigCallback(new RequestConfigCallback() 
			{
				public Builder customizeRequestConfig(Builder requestConfigBuilder) 
				{
					requestConfigBuilder.setConnectTimeout(es_connectTimeOut);
					requestConfigBuilder.setSocketTimeout(es_socketTimeOut);
					requestConfigBuilder.setConnectionRequestTimeout(es_connectionRequestTimeOut);
					return requestConfigBuilder;
				}
			});
			// 异步httpclient连接数配置
			builder.setHttpClientConfigCallback(new HttpClientConfigCallback() 
			{
				public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) 
				{
					httpClientBuilder.setMaxConnTotal(es_maxConnectNum);
					httpClientBuilder.setMaxConnPerRoute(es_maxConnectPerRoute);
					return httpClientBuilder;
				}
			});
			RestHighLevelClient client = new RestHighLevelClient(builder);
			return client;
		} 
		catch (Exception e)
		{
			if(spartacus_debug.isdebug)
			{
				//记录debug日志
				spartacus_debug.writelog_txt("spartacus_datafactory[datafactory_service]:ES连接失败,"+e.getMessage());
			}
			return null;
		}
	}
	//#endregion
	//#region 单条创建索引
	public void createIndex(RestHighLevelClient client,String logJson)
	{
		try 
		{
			IndexRequest indexRequest = new IndexRequest();
			indexRequest.index("logsys_index");
			indexRequest.source(logJson,XContentType.JSON);
			client.index(indexRequest,RequestOptions.DEFAULT);
		} 
		catch (Exception e) 
		{
			System.out.println("触发catch:"+e.getMessage());
			e.printStackTrace();
		}
	}
	//#endregion
	//#region 批量创建索引
	public void createIndex_many(RestHighLevelClient client,ArrayList<String> jsonlist)
	{
		try 
		{
			BulkRequest request = new BulkRequest();
			for (String jsonstr : jsonlist) 
			{
				IndexRequest indexRequest = new IndexRequest();
				indexRequest.index("logsys_index");
//				
//				String logJson = JSONObject.fromObject(logentity).toString();
				indexRequest.source(jsonstr,XContentType.JSON);
				request.add(indexRequest);
			}
			client.bulk(request, RequestOptions.DEFAULT);
		}
		catch (Exception e) 
		{
			System.out.println("触发catch:"+e.getMessage());
		}
	}
	//#endregion
}

项目我上传到github中,感兴趣的可以下载下来看看,希望大神可以在以后多多指点。

github代码地址:https://github.com/sjctt/spartacus

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值