ElasticSearch Java API 入門使用(增,刪,改,查)

前言

但想要用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> dataList = new ArrayList>();

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 ;

ElasticSearch Java API 入門使用(增,刪,改,查)

三:添加方法

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 ;

ElasticSearch Java API 入門使用(增,刪,改,查)

四:更新方法

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 ;

ElasticSearch Java API 入門使用(增,刪,改,查)

五:刪除

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的基本增刪改查,是不是跟操作數據庫很相似呢?喜歡的話關注一下吧。


分享到:


相關文章: