package com.c4c.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; public class OracleToETS {
static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";//"oracle.jdbc.driver.OracleDriver";//驱动
static final String DB_URL = "jdbc:oracle:thin:@127.0.0.1:1521:s2";//数据库URL static final String USER ="joey";//数据库对应的用户名
static final String PASS = "joey";//登录密码 public static void main(String[] args) {
OracleToETS tmp = new OracleToETS();
List<User> userList = tmp.getAllList();
ESClient esclient = new ESClient();
esclient.initESClient();
esclient.bulkdoc(userList);
} public List<User> getAllList()
{
ResultSet rs = null;//执行SQL语句,返回的结果
Statement stmt = null; //将数据发送到数据库中
Connection conn = null;//建立数据库的连接
List<User> list = new ArrayList<User>();
try
{
Class.forName(JDBC_DRIVER);//oracle数据库驱动
conn = DriverManager.getConnection(DB_URL,USER,PASS);//数据库url 用户名 密码
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM o_user ");
while(rs.next())
{
String tmpId = rs.getString("ID");
String tmpName = rs.getString("NAME");
String tmpAddress = rs.getString("ADDRESS");
String tmpetype = rs.getString("E_TYPE");
String tmpeindustry = rs.getString("E_INDUSTRY");
Date tmpcheckdate = rs.getDate("CHECK_DATE");
list.add(new User(tmpId,tmpName,tmpAddress,tmpetype,tmpeindustry,rs.getString("EMPIRICAL_SCOPE"),tmpcheckdate,
rs.getDate("CREATE_TIME"),rs.getString("LEGAL_PERSON"),rs.getString("REGISTRATION_UNIT"),rs.getString("JURISDICTION_UNIT"),
rs.getString("PHONE_NO"),rs.getString("BAR_ID"),rs.getString("BUILD_ID"),rs.getString("FLOOR_ID"),
rs.getString("ROOM_ID"),rs.getString("BAR_LNG"),rs.getString("BAR_LAT"),rs.getString("BUILD_LNG"),rs.getString("BUILD_LAT"),
rs.getString("ROOM_LNG"),rs.getString("ROOM_LAT")));
}
}catch(Exception e)
{
e.printStackTrace();
}finally
{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
}
package com.c4c.test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set; import org.apache.lucene.analysis.compound.hyphenation.TernaryTree.Iterator;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.filters.Filters.Bucket;
import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsBuilder;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.After;
import org.junit.Before; /**
* @author joey
*
*/
public class ESClient { private Client client;
/**
* 初始化客户端连接
*/
@Before
public Client initESClient() {
// 配置你的es,如果你的集群名称不是默认的elasticsearch,需要以下这步
Settings settings = Settings.settingsBuilder().put("cluster.name","elasticsearch").build();
// 这里可以同时连接集群的服务器,可以多个,并且连接服务是可访问的
try {
// on startup,因为是默认的集群名,所以不需要setting
client = TransportClient.builder().build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
} catch (UnknownHostException e) {
e.printStackTrace();
}finally
{
if(client != null)
{
System.out.println("连接成功!");
}
}
return client;
} @After
public void closeESClient() {
client.close();
System.out.println("连接关闭!");
} /**
* 创建索引、类型、文档并插入ID为1文档内容
*/
@SuppressWarnings("unused")
private void createIndex() {
IndexResponse response = null;
try {
response = client.prepareIndex("customertest", "joey", "1")
.setSource(XContentFactory.jsonBuilder().startObject()
.field("name", "joey")
.field("time", new Date())
.endObject()
)
.get();
} catch (IOException e) {
e.printStackTrace();
}finally
{
if(response != null)
{
System.out.println("索引创建成功!");
}
}
}
/**
* 获取文档
*/
public void get(){
GetResponse response = client.prepareGet("customer", "external", "1").get();
Set<String> headers = response.getHeaders();
System.out.println(headers);//获取请求头
boolean exists = response.isExists();
System.out.println(exists);//判断索引是否存在
String sourceString = response.getSourceAsString();
System.out.println(sourceString);//获取索引,并打印出索引内容
String id = response.getId();
System.out.println(id);//获取索引id
boolean sourceEmpty = response.isSourceEmpty();
System.out.println(sourceEmpty);//获取索引的内容是否为空
} /**
* 删除
*/
public void delete(){
//DeleteResponse response = client.prepareDelete("customertest", "joey", "1").get(); //删除文档
//删除索引
DeleteIndexResponse deleteIndexResponse = client.admin().indices()
.prepareDelete("s2")
.execute().actionGet();
boolean isFound = deleteIndexResponse.isAcknowledged();
System.out.println(isFound);//返回文档是否存在,存在删除
} /**
* 搜索索引
*/
public void search(){
//创建查询索引
SearchRequestBuilder searchRequestBuilder = client.prepareSearch("s2");
//设置查询索引类型
searchRequestBuilder.setTypes("o_user");
//设置查询类型
searchRequestBuilder.setSearchType(SearchType.DEFAULT);
//设置查询关键字
searchRequestBuilder.setQuery(QueryBuilders.commonTermsQuery("name", "宁波"));
// 设置查询数据的位置,分页用吧
searchRequestBuilder.setFrom(0);
// 设置查询结果集的最大条数
searchRequestBuilder.setSize(10);
// 设置是否按查询匹配度排序
searchRequestBuilder.setExplain(true);
// 最后就是返回搜索响应信息
SearchResponse response = searchRequestBuilder.execute().actionGet();
//System.out.println("响应结果:"+response); //获取搜索文档的结果
SearchHits searchHits = response.getHits();
SearchHit[] hits = searchHits.getHits();
System.out.println("数量:"+hits.length);
for (int i = 0; i < hits.length; i++) {
SearchHit hit = hits[i];
Map<String, Object> result = hit.getSource();
System.out.println("文档结果:"+result);
}
System.out.println("查询索引完毕!");
}
/**
* 批量新增
*/
public void bulkdoc(List<User> list)
{
SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd");
BulkRequestBuilder bulkRequest = client.prepareBulk();
long b = System.currentTimeMillis();
try {
for(User user:list)
{
String _id = user.getId();
bulkRequest.add(client.prepareIndex("s2", "o_user", _id)
.setSource(XContentFactory.jsonBuilder()
.startObject()
.field("name", user.getName())
.field("address",user.getAddress())
.field("etype",user.getE_type())
.field("e_industry",user.getE_industry())
.field("empirical_scope",user.getEmpirical_scope())
.field("checkdate",dateFormater.format(user.getCheck_date()))
.field("create_time",dateFormater.format(user.getCreate_time()))
.field("legal_person",user.getLegal_person())
.field("registration_unit",user.getRegistration_unit())
.field("jurisdiction_unit",user.getJurisdiction_unit())
.field("phone_no",user.getPhone_no())
.field("bar_id",user.getBar_id())
.field("build_id",user.getBuild_id())
.field("floor_id",user.getFloor_id())
.field("room_id",user.getRoom_id())
.field("bar_lng",user.getBar_lng())
.field("bar_lat",user.getBar_lat())
.field("build_lng",user.getBuild_lng())
.field("build_lat",user.getBuild_lng())
.field("room_lng",user.getRoom_lng())
.field("room_lat",user.getRoom_lat())
.endObject()
)
);
}
} catch (IOException e) {
e.printStackTrace();
}
BulkResponse bulkResponse = bulkRequest.execute().actionGet();
if (bulkResponse.hasFailures()) {
System.out.println(bulkResponse.buildFailureMessage());
}
long useTime = System.currentTimeMillis()-b;
System.out.println("useTime:" + useTime);
}
/**
* 聚合查询
*/
public void aggSearch()
{
SearchRequestBuilder srb = client.prepareSearch("s2");
srb.setSize(0);
srb.setTypes("o_user");
srb.setHighlighterType("o_user");
srb.setSearchType(SearchType.QUERY_THEN_FETCH);
TermsBuilder typeTermsBuilder = AggregationBuilders.terms("etypeAgg").field("etype");
typeTermsBuilder.size(100);
srb.addAggregation(typeTermsBuilder);
SearchResponse sr = srb.execute().actionGet();
System.out.println(sr);
} public void useScrolls()
{
QueryBuilder qb = QueryBuilders.multiMatchQuery("工厂", "name");
SearchResponse scrollResp = client.prepareSearch("s2")
.addSort("name", SortOrder.ASC)
.setScroll(new TimeValue(60000))
.setQuery(qb)
.setSize(100).execute().actionGet(); //100 hits per shard will be returned for each scroll
while (true) {
for (SearchHit hit : scrollResp.getHits().getHits()) {
System.out.println(hit.getScore());
}
scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();
if (scrollResp.getHits().getHits().length == 0) {
break;
}
}
} public static void main(String args[]){
System.out.println("ES集群连接测试");
ESClient esc = new ESClient();
esc.initESClient();
//esc.createIndex();
//esc.get();
//esc.delete();
//esc.search();
//esc.bulkdoc();
// esc.closeESClient();
esc.aggSearch();
//esc.useScrolls();
}
}

将Oracle中的数据放入elasticsearch的更多相关文章

  1. Elasticsearch 2.3.2 从oracle中同步数据

    Elasticsearch 2.3.2 从oracle中同步数据   1         数据批量导入-oracle 采用 elasticsearch-jdbc 插件 安装.版本需要ES版本一致 最新 ...

  2. C语言:把分数最低的学生数据放入数组b所指的数组中,-从键盘输入若干字符串,写入文件myfile4中,用-1作字符输入结束的标志,

    //学生记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组中,fun函数:把分数最低的学生数据放入数组b所指的数组中,分数最低的学生可能不止一个.人数返回. #include <st ...

  3. java 实现每次从list中取5000条数据放入新list

    从list中取固定条数的数据放入新的list里 public static <T> List<List<T>> split(List<T> resLis ...

  4. oracle中的数据对象

    oracle中的数据对象有表.视图.索引.序列等 表的相关操作 1.创建表 方式一: 方式二:create table person( create table person1 id number(1 ...

  5. 在Oracle中更新数据时,抛出:ORA-01008: not all variables bound

    在Oracle中更新数据时,抛出了一个 :ORA-01008 not all variables bound, 我的理解是不是所有的变量/参数都有边界,不懂: 后来知道了,原来是“不是所有变量/参数都 ...

  6. MyBatis在Oracle中插入数据并返回主键的问题解决

    引言:  在MyBatis中,希望在Oracle中插入数据之时,同一时候返回主键值,而非插入的条数... 环境:MyBatis 3.2 , Oracle. Spring 3.2   SQL Snipp ...

  7. Sqoop_具体总结 使用Sqoop将HDFS/Hive/HBase与MySQL/Oracle中的数据相互导入、导出

    一.使用Sqoop将MySQL中的数据导入到HDFS/Hive/HBase watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWFyb25oYWRvb3A=/ ...

  8. Oracle中读取数据一些原理研究

    文章很多摘录了 http://blog.163.com/liaoxiangui@126/blog/static/7956964020131069843572/ 同时基于这篇文章的基础上,补充一些学习要 ...

  9. 如何用Excel直接查询Oracle中的数据

    将Oracle中查询的数据保存为Excel文件,通常使用的是PL/SQL Developer. 其实,Excel可直接写SQL语句查询Oracle中数据,在这里,用到ODBC驱动.详细步骤如下: 一. ...

随机推荐

  1. RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第三篇【实例】

    http://blog.csdn.net/deadgrape/article/details/50579565 在这一篇里我先让大家看一下RF+APPIUM这个框架的实际运行时什么样子的,给大家一个直 ...

  2. PL/SQL控制语句

    本节要点: l  选择结构控制语句 if条件控制语句 Case语句 l  循环结构控制语句 基本loop循环 for循环 while循环 嵌套循环 PL/SQL既然是面向过程的编程语言,那么它就有针对 ...

  3. SQLPlus在连接时通常有四种方式

    SQLPlus在连接时通常有四种方式 1. ? 1 sqlplus / as sysdba 操作系统认证,不需要数据库服务器启动listener,也不需要数据库服务器处于可用状态.比如我们想要启动数据 ...

  4. Ubuntu12.04 下 GTK3.xx 的安装、编译和測试

    用此方法成功在UBUNTU 12.04下安装GTK 3.xxx. 一.安装 1.安装gcc/g++/gdb/make 等基本编程工具 $sudo apt-get install build-essen ...

  5. 怎样通过反编译工具与插件 查看java *.class 文件源代码

    Java Decompiler[java 反编译]:开发了反编译工具.能够方便查看*.class 文件源代码.以下介绍几种查看源代码的方式:工具&插件 1.JD-GUI JD-GUI  是显示 ...

  6. sqlite学习笔记6:更新表数据-update

    一 条件推断 在SQL中条件推断使用where,相当于其它变成语言中的if,基本使用方法如: SELECT column1, column2, columnN FROM table_name WHER ...

  7. IOS-2-C语言和Objective-C语言衔接学习资料

    前言:在IOS学习中.通常会先学习一周的C语言,两周的Objective-C语言,这是今后开发的最基础最重要的部分,以下给大家分享一下培训课上的精简资料: C语言和Objective-C语言衔接学习资 ...

  8. [IOS]mac以太网连接

    今天玩了一下苹果一体机.感觉还是蛮不错的,只是.就是用以太网连接的时候遇到了一点问题.用这篇文章记录一下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/ ...

  9. 创建逻辑dg

    逻辑备用DG   今天是2014-04-29,近期一直忙的事情,也没来的急写点东西.今天继续整理dg的相关内容,要说的是逻辑dg的创建过程和注意事项. 什么是逻辑dg呢?物理dg类似于主库的完整副本. ...

  10. PHP 上传文件到其他服务器

    PHP 上传文件到其他服务器 标签(空格分隔): 安装Guzzle类库 **guzzle** 是发送网络请求的类库 composer安装:**composer require guzzlehttp/g ...