您的位置:首页 > 编程语言 > Java开发

elasticsearch Insert 插入数据和delete 删除数据(Java)

2018-01-11 16:14 603 查看
首先我不赞成再采用一些中间件(jar包)来解决和 Elasticsearch  之间的交互,比如
Spring-data-elasticsearch.jar
系列一样,用就得依赖它。而 Elasticsearch 
本身的用法就是很简洁的,也很容易,只要稍微加一下封装,即可解决。下面上我的简单封装的批量处理。

package com.sojson.core.elasticsearch.manager;



import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;



import net.sf.json.JSONObject;



import org.elasticsearch.action.bulk.BulkRequestBuilder;

import org.elasticsearch.action.bulk.BulkResponse;

import org.elasticsearch.action.index.IndexRequestBuilder;



import com.sojson.common.utils.StringUtils;

import com.sojson.core.elasticsearch.utils.ESTools;



public class InsertManager {



/**

* 添加数据到Elasticsearch

* @param index索引

* @param type类型

* @param idNameId字段名称

* @param json存储的JSON,可以接受Map

* @return

*/

public static  Map save(String index, String type, String idName,JSONObject json) {

List list = new ArrayList();

list.add(json);

return save(index, type, idName, list);

}



/**

* 添加数据到Elasticsearch

* @param index索引

* @param type类型

* @param idNameId字段名称

 * @param listData  一个对象集合

* @return

*/

@SuppressWarnings("unchecked")

public static  Map save(String index, String type, String idName,List listData) {

BulkRequestBuilder bulkRequest = ESTools.client.prepareBulk().setRefresh(true);

Map resultMap = new HashMap();



for (Object object : listData) {

JSONObject json = JSONObject.fromObject(object);

//没有指定idName 那就让Elasticsearch自动生成

if(StringUtils.isBlank(idName)){

IndexRequestBuilder lrb = ESTools.client
                                                            .prepareIndex(index, type)
                                                                .setSource(json);

bulkRequest.add(lrb);

}

else{

String idValue = json.optString(idName);

IndexRequestBuilder lrb = ESTools.client
                                                                .prepareIndex(index, type,idValue)
                                                                .setSource(json);

bulkRequest.add(lrb);

}


}



BulkResponse bulkResponse = bulkRequest.execute().actionGet();

if (bulkResponse.hasFailures()) {

// process failures by iterating through each bulk response item

System.out.println(bulkResponse.getItems().toString());

resultMap.put("500", "保存ES失败!");

return resultMap;

}

bulkRequest = ESTools.client.prepareBulk();

resultMap.put("200", "保存ES成功!");

return resultMap;

}

}


Elasticsearch的删除也是很灵活的,下次我再介绍,
DeleteByQuery
的方式。今天就先介绍一个根据ID删除。上代码。

package com.sojson.core.elasticsearch.manager;



import org.elasticsearch.action.delete.DeleteResponse;



import com.sojson.common.model.SOBanggKey;

import com.sojson.core.elasticsearch.utils.ESTools;



public class DeleteManager {

/**

 * 根据ID删除

 * @param key

* @return

*/

public static int deleteSOBanggByKey(SOBanggKey key) {

//这里可以忽略,组装一个我业务逻辑的ID

String prefix = "%sx_x%s";

String id = String.format(prefix, key.getId(),key.getGid());


DeleteResponse result = ESTools.client.prepareDelete().setRefresh(true).setIndex(MappingManager.INDEX)

    .setType(MappingManager.B_TYPE)

    .setId(id)//设置ID

    .setRefresh(true)//刷新

    .execute().actionGet();

   //是否查找并删除

   boolean isfound = result.isFound();

   return isfound?1:0;

}



}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐