最近在学习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小时内删除。
留言与评论(共有 0 条评论) |