首先我不赞成再采用一些中间件(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 idName Id字段名称* @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 idName Id字段名称* @param listData 一个对象集合* @return*/("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 itemSystem.out.println(bulkResponse.getItems().toString());resultMap.put("500", "保存ES失败!");return resultMap;}bulkRequest = ESTools.client.prepareBulk();resultMap.put("200", "保存ES成功!");return resultMap;}}
代码只能做测试使用,不能作为项目直接使用,请自己考虑风险,哈哈。
本文介绍了一种针对Elasticsearch进行批量数据插入的简单封装方法,通过自定义的Java类实现无需依赖额外中间件即可轻松操作Elasticsearch。
3万+

被折叠的 条评论
为什么被折叠?



