Elasticsearch部分简单的java方法

本文分享了在学习Elasticsearch6过程中的实用方法,包括索引管理、数据增删改查、条件查询等核心操作的Java实现,适用于开发者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学习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;
  }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值