前言
但想要用ElasticSearch 在海量的數據中找到和自己相關的業務數據,實現對已有的數據實現全文檢索、分類統計等功能並應用到業務系統中,還需要藉助Java API來實現,今天總結一下ElasticSearch Java API的簡單使用。
一:獲取ElasticSearch client連接對象
public Client getEsClient(){
Client client = null;
try{
Settings settings = ImmutableSettings.settingsBuilder()
.put("client.transport.sniff", true) //自動嗅探整個ES集群節點
.put("client", true)
.put("data",false)
.put("cluster.name","elasticsearch") //設置集群名字
.put("number_of_shards", 2) //2個主分片
.put("index.refresh_interval", "5s") //每5秒提交一次數據,類似oracle中的commit
.build();
client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("hostName", 9200));
}catch(Exception ex){
ex.printStackTrace();
}
return client;
}
如果覺得這種獲取連接方式麻煩還可以直接使用:TransportClient類來進行連接,TransportClient實現了Client接口。
二:List查詢方法
List
Client client = null;
try{
client = getEsClient();
//設置查詢條件(類似sql中 where = eventid )
QueryBuilder qb = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("eventid", eventid));
// 設置ES中 indexName 和 indexType,以及QueryBuilders 對象
SearchRequestBuilder requestBuilder = client.prepareSearch(EventBean.indexName)
.setTypes(EventBean.indexType)(添加類型)
.setQuery(qb);
//執行查詢 (可以設置排序、分頁)
SearchResponse actionGet = requestBuilder.addSort(SortBuilders.fieldSort("occurtime").order(SortOrder.DESC))
.setFrom((pageNum-1) * pageSize)
.setSize(pageNum * pageSize)
.execute().actionGet();
//遍歷查詢結果
if(actionGet != null){
SearchHits hits = actionGet.getHits();
if(hits != null && hits.getHits() != null){
Map
hitMap = null; for (SearchHit hit : hits.getHits()){
hitMap = hit.getSource();
if (hitMap == null || hitMap.size() <= 0){
continue;
}
dataList.add(hitMap );
}
}
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
//關閉client
}
return dataList ;
三:添加方法
boolean optFlag = false;
Client client = null;
try{
//獲取Elasticsearch client對象
client = getEsClient();
//構造請求對象
BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
IndexRequestBuilder indexRequestBuilder = null;
//根據請求對象bodyList, 組織bulkRequestBuilder對象
String indexId = "";
Map
bodyMap = null; for (int count = 0; count < bodyList.size(); count++) {
bodyMap = bodyList.get(count);
if (bodyMap == null) {
break;
}
//組織索引對象id
indexId = ConverUtils.Obj2Str(bodyMap.get("id"), "");
indexRequestBuilder = client.prepareIndex(indexName, indexType).setId(indexId).setSource(bodyMap);
bulkRequestBuilder.add(indexRequestBuilder);
}
//批量更新執行
BulkResponse bulkResponse = bulkRequestBuilder.execute().actionGet();
if (bulkResponse.hasFailures()) {
optFlag = false;
} else {
optFlag = true;
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
//關閉client
}
return optFlag ;
四:更新方法
boolean optFlag = false;
Client client = null;
try{
//獲取Elasticsearch client對象
client = getEsClient();
//構造請求對象
BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
UpdateRequestBuilder updateRequestBuilder = null;
//根據請求對象cvdMap,組織索引對象
String indexId = getEsIndexId(client, ConverUtils.Obj2long(cvdMap.get("id"), 0L));
//獲取索引(getEsIndexId)
updateRequestBuilder = client.prepareUpdate(indexName, indexType, indexId).setDoc(cvdMap);
bulkRequestBuilder.add(updateRequestBuilder);
//批量更新執行
BulkResponse bulkResponse = bulkRequestBuilder.setRefresh(true ).execute().actionGet();
if (bulkResponse.hasFailures()) {
optFlag = false;
} else {
optFlag = true;
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
//關閉client
}
return optFlag ;
五:刪除
boolean optFlag = false;
Client client = null;
try{
//獲取Elasticsearch client對象
client = getEsClient();
//根據id_array數組, 組織索引對象
BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
DeleteRequestBuilder deleteRequestBuilder = null;
for(int i=0; i
if(id_array[i] == null || id_array[i].trim().equals("")){
continue;
}
//根據indexName, indexType, indexId進行刪除(這裡nfa_dictionary索引中ID字段值和ES自有_id值相同, 可以操作)
deleteRequestBuilder = client.prepareDelete(indexName, indexType, id_array[i]);
bulkRequestBuilder.add(deleteRequestBuilder.request());
}
//進行批量刪除操作
BulkResponse bulkResponse = bulkRequestBuilder.execute().actionGet();
if (bulkResponse.hasFailures()) {
optFlag = false;
}else {
optFlag = true;
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
//關閉client
}
return optFlag ;
好啦,這就是Java操作ES的基本增刪改查,是不是跟操作數據庫很相似呢?喜歡的話關注一下吧。
閱讀更多 陶陶開心每一天 的文章