Elasticsearch部分简单的java方法

小编 2026-07-11 阅读:1163 评论:0
最近在学习elasticsearch 6,列举自己写的一些小方法。有不对的地方,还请大家指正 import java.util.ArrayList; import java.util.HashMap; im...

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

import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.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.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.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 = EsClientConnect.getInstance().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 =  cirb.execute().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 = EsClientConnect.getInstance().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 = EsClientConnect.getInstance().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 = EsClientConnect.getInstance().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 = EsClientConnect.getInstance().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 = EsClientConnect.getInstance().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 = EsClientConnect.getInstance().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 = EsClientConnect.getInstance().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 = EsClientConnect.getInstance().getClient();     //创建连接
             GetResponse response = client.prepareGet(databasenm, tablenm, id).get();
             return response.getSourceAsString();
         } 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 = EsClientConnect.getInstance().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 hit:response.getHits()){
                Map<String,Object> map =new HashMap<String,Object>();
                map.put(\"data\", hit.getSourceAsString());
                map.put(\"id\", hit.getId());
                mapList.add(map);
            }
           }catch (Exception e) {
             e.printStackTrace();
         }finally {
            if(client != null ) client.close();
         } 
           return mapList;
   }
   // BulkResponse bulkResponse = bulkRequest.execute().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 = EsClientConnect.getInstance().getClient();
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch(databasenm).setTypes(tablenm);
            SearchResponse response = searchRequestBuilder.execute().actionGet();
            //SearchHits searchHits = response.getHits();
            count = response.getHits().getTotalHits();
            System.out.println(response.getHits().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 = EsClientConnect.getInstance().getClient();
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch(databasenm).setTypes(tablenm)
                    .setQuery(QueryBuilders.matchQuery(\"id\", \"0000b457c95349f58611486d39f97900\"));
            SearchResponse response = searchRequestBuilder.execute().actionGet();
            //SearchHits searchHits = response.getHits();
            count = response.getHits().getTotalHits();
            System.out.println(response.getHits().getTotalHits());
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if(client != null ) client.close();
        }
        return count;
  }
}
 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

上一篇:NGINX配置详解及应用 下一篇:NGINX部署
热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表