0
点赞
收藏
分享

微信扫一扫

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;
}




举报

相关推荐

0 条评论