java 从Oracle数据库到处数据到Elasticsearch全文检索库进行全文查询

Posted fei-yao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 从Oracle数据库到处数据到Elasticsearch全文检索库进行全文查询相关的知识,希望对你有一定的参考价值。

首先编写代码前,要先把Elasticsearch环境搭建好(这个很简单,网上百度一大堆)。然后将elasticsearch jar包导入工程当中。

之后开始编码工作:

第一步:编写连接本地Elasticsearch环境的代码

public static Client client=null;
    public static Client getClient(){
       if(client !=null){
           return client;
       }
       Settings settings = Settings.settingsBuilder().put("cluster.name","my-application").build();
       try{
           client = TransportClient.builder().settings(settings).build()
                   .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(null),9300));//如果是Null,则默认连接本地Ip
       }catch(UnknownHostException e){
           e.printStackTrace();
       }
       return client;
    }

第二步,建立索引库和创建索引

public void createIndexResponse(String indexname, String type, List<String> jsondata){
        //创建索引库 需要注意的是.setRefresh(true)这里一定要设置,否则第一次建立索引查找不到数据
        IndexRequestBuilder requestBuilder = getClient().prepareIndex(indexname, type).setRefresh(true);
        for(int i=0; i<jsondata.size(); i++){
            requestBuilder.setSource(jsondata.get(i)).execute().actionGet();
        }     
         
    }
    
    /**
     * 创建索引
     * @param client
     * @param jsondata
     * @return
     */
    public IndexResponse createIndexResponse(String indexname, String type,String jsondata){
        IndexResponse response = getClient().prepareIndex(indexname, type)
            .setSource(jsondata)
            .execute()
            .actionGet();
        return response;
    }
    
    /**
     * 执行搜索
     * @param queryBuilder
     * @param indexname
     * @param type
     * @return
     */
    public List<EsBean>  searcher(QueryBuilder queryBuilder, String indexname, String type){
        List<EsBean> list = new ArrayList<EsBean>();//EsBean是数据库的字段
        SearchResponse searchResponse = getClient().prepareSearch(indexname).setTypes(type)
        .setQuery(queryBuilder)
        .execute()
        .actionGet();
        SearchHits hits = searchResponse.getHits();
        System.out.println("查询到记录数=" + hits.getTotalHits());
        SearchHit[] searchHists = hits.getHits();
        if(searchHists.length>0){
            for(SearchHit hit:searchHists){
                Integer id = (Integer)hit.getSource().get("id");
                String name =  (String) hit.getSource().get("name");
                String function =  (String) hit.getSource().get("funciton");
                list.add(new EsBean(id, name, function));
            }
        }
        return list;
    }

第三步,写入实体类Esbean

public class Esbean{
private String reg_id;
private String organization;


省略setter和getter方法;
public EsBean(String reg_id,String organization){
super();
this.reg_id=reg_id;
this.organization=organization;
}
}

第四步,从oracle数据库中查询出数据导入到Esalticsearch库中

 1 public class jdbc{
 2       public  static jdbc dataFactory = new jdbc();
 3       private static Connection conn;
 4       static final String username="****";
 5       static final String password="*****";
 6       static final String url="***********";
 7       public static synchronized Connection getInstance(){
 8                 if(conn=null || conn.isClosed()){
 9                       class.forName("oracle.jdbc.driver.OracleDriver");
10                    conn=DriverManager.getConnection(url,username,password);
11               }
12               return conn;
13            }
14 }

 

以上是关于java 从Oracle数据库到处数据到Elasticsearch全文检索库进行全文查询的主要内容,如果未能解决你的问题,请参考以下文章

java 怎么从excel文件导入到oracle数据库中

java项目数据库从oracle迁移到mysql 中 java部分的一些修改

将多个引用游标从 Oracle 过程返回到 Java

如何将结果集作为输入从java传递到oracle存储过程

ORACLE——将多行文本数据转换成一行

将人员的记录从一个数据库复制到另一个数据库 - Oracle和Java