Elasticsearch部分简单的java方法

阅读: 评论:0

Elasticsearch部分简单的java方法

Elasticsearch部分简单的java方法

最近在学习elasticsearch 6,列举自己写的一些小方法。有不对的地方,还请大家指正
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.elasticsearch.action.ate.CreateIndexRequestBuilder;
import org.elasticsearch.action.ate.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
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.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.ansport.TransportClient;
import nt.XContentBuilder;
import nt.XContentFactory;
import nt.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;

public class EsCommonServiceImpl {
    /**
      * 创建索引
      * @param databasenm 创建数据库
      * @param tablename 创建数据表
      * @return
      */
     //public static boolean carateIndex(String index ,String tablename) {
     public boolean carateIndex(String databasenm ) {
         //让数据库名称和数据表名称保持一致,以便每个人只操作自家的库
         String tablename = databasenm;
         TransportClient client = null;
         try {
             client = Instance().getClient();     //创建连接
             XContentBuilder mapping = XContentFactory.jsonBuilder().startObject().startObject("settings")
                                                  //.field("number_of_shards",5)//设置分片数量
                                                  //.field("number_of_replicas",1)//设置副本数量
                                                  .endObject()
                                              .endObject()
                                              .startObject()
                                                  .startObject(tablename)//type名称
                                                      .startObject("properties")//下面是设置文档属性
                                                          .startObject("type").field("type","string").field("store","yes")
                                                          .endObject()
                                                          .startObject("eventDate").field("type","date")
                                                              .field("format","dateOptionalTime").field("store","yes")
                                                          .endObject()
                                                          .startObject("message").field("type","string")
                                                              .field("index","not_analyzed").field("store","yes")
                                                          .endObject()
                                                      .endObject()
                                                  .endObject()
                                              .endObject();
            CreateIndexRequestBuilder cirb = client.admin().indices().prepareCreate(databasenm).setSource(mapping);
            CreateIndexResponse response =  ute().actionGet();
            if(response.isAcknowledged()){
                return true;//创建成功
            }else{
                return false;///创建失败
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(client != null ) client.close();
        }
        return false;
     }
    
     /**
      * 删除索引(删除数据库)
      * @param databasenm
      * @return
      */
    public  boolean deleteIndex(String databasenm) {
        TransportClient client = null;
        try {
            client = Instance().getClient();     //创建连接
            DeleteIndexRequest deleteIndex = new DeleteIndexRequest(databasenm);
            AcknowledgedResponse response =  client.admin().indices().delete(deleteIndex).get();
            if(response.isAcknowledged()){
                return true;//删除失败
            }else{
                return false;//删除成功
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(client != null ) client.close();
        }
        return false;
    }
     
     /**
      * 插入数据(带主键)(若有相同id,则会覆盖)
      * @param databasenm      数据库
      * @param tablenm        数据表    
      * @param id            主键id
      * @param jsonData   数据json串
      * @return
      */
     public  String  insertDocById(String databasenm,  String id ,String jsonData){
         TransportClient client = null;
         String tablenm = databasenm;
         try {
             client = Instance().getClient();     //创建连接
             IndexResponse response = client.prepareIndex(databasenm, tablenm, id).setSource(jsonData).get();//可以直接使用字符串
             return response.status().toString();    
         } catch (Exception e) {
            e.printStackTrace();
         }finally {
            if(client != null ) client.close();
         }
        return "false";
    }
    
    /**
     * 插入数据(自动生成id)
     * @param databasenm 数据库
     * @param tablenm  数据表
     * @param jsonData 数据json串
     */
    public  String  insertDocByJson(String databasenm,String jsonData){
        TransportClient client = null;
        String tablenm = databasenm;
        try {
            client = Instance().getClient();     //创建连接
            IndexResponse response = client.prepareIndex(databasenm,tablenm).setSource(jsonData,XContentType.JSON).get();//可以直接使用字符串
            return  response.status().toString();    
         }catch (Exception e) {
            e.printStackTrace();
         }finally {
            if(client != null ) client.close();
         }
        return "false";
    }
    
    
    /**
     * 插入map类型数据
     * @param databasenm
     * @param tablenm
     * @param source
     * @return
     */
    public  String  insertDocByModel(String databasenm,Map<String,Object> source){
        TransportClient client = null;
        String tablenm = databasenm;
        try {
            client = Instance().getClient();     //创建连接
            IndexResponse response = client.prepareIndex(databasenm,tablenm).setSource(source).get();//可以直接使用字符串
            return  response.status().toString();    
        }catch (Exception e) {
            e.printStackTrace();
         }finally {
            if(client != null ) client.close();
         }
        return "false";
    }
    
    /**
     * 删除文档(根据id)
     * @param databasenm
     * @param tablenm
     * @param id
     * @return
     */
    public  String deleteDocById(String databasenm,String id){
        TransportClient client = null;
        String tablenm = databasenm;
        try {
            client = Instance().getClient();     //创建连接
            DeleteResponse dresponse = client.prepareDelete(databasenm,tablenm,id).get();
            return dresponse.status().toString();
        }catch (Exception e) {
            e.printStackTrace();
         }finally {
            if(client != null ) client.close();
         }
        return "false";
    }
    
    /**
     * 直接修改文档(根据id修改,没有时会抛出异常)
     * @param databasenm
     * @param tablenm
     * @param id
     * @param jsonData
     * @return
     */
    public  boolean updateDoc(String databasenm, String id ,String jsonData){
        TransportClient client = null;
        String tablenm = databasenm;
        try {
            client = Instance().getClient();     //创建连接
            UpdateRequest updateRequest = new UpdateRequest(databasenm,tablenm,id).doc(jsonData);
            client.update(updateRequest).get();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;//找不到id异常
        }finally {
            if(client != null ) client.close();
         }        
    }
    /**
     * 修改文档(不存在则进行插入)
     * @param databasenm
     * @param tablenm
     * @param id
     * @param jsonData
     * @return
     * update or insert
     */
    public  boolean updateAndInsDoc(String databasenm, String id ,String jsonData){
        TransportClient client = null;
        String tablenm = databasenm;
        try {
            client = Instance().getClient();     //创建连接
            IndexRequest  indexRquest = new IndexRequest(databasenm, tablenm, id).source(jsonData);//插入数据
            UpdateRequest updateRequest = new UpdateRequest(databasenm,tablenm,id).doc(jsonData).upsert(indexRquest);//有则更新,无则插入
            client.update(updateRequest).get();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(client != null ) client.close();
         }
        return false;
    }
    
    
    
    /*****************************查询************************************************/
    /**
     * 根据id查询
     * @param databasenm
     * @param tablenm
     * @param id
     * select * from tablenm where id = id
     */
     public  String  selectDocById(String databasenm, String id) {
         TransportClient client = null;
         String tablenm = databasenm;
         try {
             client = Instance().getClient();     //创建连接
             GetResponse response = client.prepareGet(databasenm, tablenm, id).get();
             SourceAsString();
         } catch (Exception e) {
             e.printStackTrace();
         }finally {
            if(client != null ) client.close();
         }
         return null;
     }
     
     /**
      * 单条件查询(字段匹配版)
      * @param databasenm
      * @param tablenm
      * @param colname
      * @param colvalue
      * select * from tablenm where colname = colvalue
      */
   @SuppressWarnings("deprecation")
   public  List<Map<String,Object>> selectDoc(String databasenm,  String colname, String colvalue){
       //根据字段只查询
       String tablenm = databasenm;
       List<Map<String,Object>> mapList = new ArrayList<Map<String,Object>>();
           TransportClient client = null;
           try {
               client = Instance().getClient();     //创建连接
               SearchResponse response=client.prepareSearch(databasenm)//设置要查询的索引(index)
                    .setSearchType(SearchType.QUERY_AND_FETCH)
                    .setTypes(tablenm)
                    .setQuery(QueryBuilders.matchQuery(colname, colvalue)) //在这里"message"是要查询的field,"Accept"是要查询的内容
                    //.setQuery(QueryBuilders.matchQuery("age", "13")) //多条件查询                
                    .setFrom(0)
                    .setSize(10)
                    .setExplain(true)
                    .execute()
                    .actionGet();
            //显示每行数据
            for(SearchHit Hits()){
                Map<String,Object> map =new HashMap<String,Object>();
                map.put("data", SourceAsString());
                map.put("id", Id());
                mapList.add(map);
            }
           }catch (Exception e) {
             e.printStackTrace();
         }finally {
            if(client != null ) client.close();
         } 
           return mapList;
   }
   // BulkResponse bulkResponse = ute().actionGet();
   
   /**
    * select count(id) from tablename
    * @param databasenm
    * @return
    */
   public long selectTypeCount(String databasenm){
           String tablenm = databasenm;          
           TransportClient client = null;
           long count = 0;
        try {
            client = Instance().getClient();
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch(databasenm).setTypes(tablenm);
            SearchResponse response = ute().actionGet();
            //SearchHits searchHits = Hits();
            count = Hits().getTotalHits();
            System.out.Hits().getTotalHits());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            if(client != null ) client.close();
        }
        return count;
   }
   
   /**
    * select count(id) from tablename where X=?  
    * @param databasenm
    * @return
    */
   public long selectTypeCountByCondition(String databasenm){
          String tablenm = databasenm;          
           TransportClient client = null;
           long count = 0;
        try {
            client = Instance().getClient();
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch(databasenm).setTypes(tablenm)
                    .setQuery(QueryBuilders.matchQuery("id", "0000b457c95349f58611486d39f97900"));
            SearchResponse response = ute().actionGet();
            //SearchHits searchHits = Hits();
            count = Hits().getTotalHits();
            System.out.Hits().getTotalHits());
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(client != null ) client.close();
        }
        return count;
  }
}
 

本文发布于:2024-01-31 22:56:52,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170671301331989.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:简单   方法   Elasticsearch   java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23