elasticsearch-java api之文件(document)各種操作
使用java api和es互動時,可以是json字串、map物件;es中內建Jackson json序列化機制,可以將自定義物件轉成string或者byte,然後傳給es-java api使用。
1、新增document:
-
public static boolean add(String indexName,String indexType,Map<String,Object> data){
-
IndexResponse actionGet = transportClient
-
.prepareIndex(indexName, indexType)
-
.setSource(data)
-
//.setId("1") //自己設定了id,也可以使用ES自帶的,但是看文件說,ES的會因為刪除id發生變動。
-
.execute().actionGet();
-
return actionGet.isCreated();
-
}
注:如果設定了id,那麼id存在的則直接更新(所有欄位覆蓋更新)
2、更新document:
1)使用updateRequest:
-
public static void update(String indexName,String indexType,String id,Map<String,Object> data){
-
UpdateRequest updateRequest = new UpdateRequest();
-
updateRequest.index(indexName)
-
.type(indexType)
-
.id(id)
-
.doc(data);
-
transportClient.update(updateRequest).actionGet();
-
//或者使用下面方式(效果一樣)
-
/*XContentBuilder jsonBuilder =XContentFactory.jsonBuilder();
-
UpdateRequest updateRequest = new UpdateRequest();
-
updateRequest.index(indexName)
-
.type(indexType)
-
.id(id)
-
.doc(jsonBuilder
-
.startObject()
-
.field("title").value("XContentBuilder")
-
.endObject());
-
transportClient.update(updateRequest).actionGet();*/
-
}
說明:
A、可以更新區域性欄位(map裡有多少欄位更新多少,也可以增加map裡面新欄位);
B、當id不存在時,不會自動插入,直接報錯 2)使用prepareUpdate:
-
public static void update1(String indexName,String indexType,String id,Map<String,Object> data){
-
UpdateRequestBuilder prepareUpdate = transportClient.prepareUpdate(indexName,indexType,id);
-
prepareUpdate
-
.setDoc(data)
-
//.setId("")
-
//.setScript("")
-
.get();
-
//或者
-
/*try {
-
XContentBuilder jsonBuilder =XContentFactory.jsonBuilder();
-
UpdateRequestBuilder prepareUpdate1 = transportClient.prepareUpdate(indexName,indexType,id);
-
prepareUpdate1
-
.setDoc(jsonBuilder
-
.startObject()
-
.field("title").value("XContentBuilder")
-
.endObject())
-
.get();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}*/
-
}
3、刪除document:
-
public static void delDocument(String indexName,String indexType,String id){
-
DeleteResponse deleteResponse = transportClient
-
.prepareDelete(indexName, indexType, id)
-
.execute().actionGet();
-
deleteResponse.isFound();
-
}
4、bulk操作:
bulk是一個批量操作,可以一次請求完成document的增刪改。
-
public static boolean bulk(String indexName,String indexType,List<Map<String,Object>> datas){
-
BulkRequestBuilder bulkRequestBuilder = transportClient.prepareBulk();
-
bulkRequestBuilder.add(transportClient.prepareIndex(indexName, indexType).setSource(datas.get(0)));
-
bulkRequestBuilder.add(transportClient.prepareDelete(indexName, indexType, "id"));
-
bulkRequestBuilder.add(transportClient.prepareUpdate(indexName, indexType, "id").setDoc(datas.get(1)));
-
BulkResponse bulkResponse = bulkRequestBuilder.execute().actionGet();
-
return bulkResponse.hasFailures();
-
}
6、get 操作:
可以通過索引名、型別名、文件id一次得到一個文件集合,文件可以來自同一個索引庫,也可以來自不同索引庫。 1)get操作:
-
public static Map<String, Object> get(String indexName,String indexType,String id){
-
GetResponse getResponse = transportClient
-
.prepareGet(indexName, indexType, id)
-
.execute().actionGet();
-
return getResponse.getSource();
-
}
2)mutilget:
-
public static List<Map<String,Object>> multiGet(String indexName,String indexType,String... ids){
-
List<Map<String,Object>> list = new ArrayList<>();
-
MultiGetResponse response = transportClient.prepareMultiGet()
-
.add(indexName,indexType,ids)
-
.add("liu1","liu1_type","AV8-YHAr6f3B-qEudDab")//另一個index、indextype和ids
-
.execute().actionGet();
-
for(MultiGetItemResponse itemResponse:response){
-
GetResponse getResponse = itemResponse.getResponse();
-
if(getResponse.isExists()){
-
list.add(getResponse.getSource());
-
//System.out.println(getResponse.getSourceAsString());
-
}
-
}
-
return list;
-
}