首先我不赞成再采用一些中间件(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
*/
@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教程(七) elasticsearch Insert 插入数据(Java)的更多相关文章
-
elasticsearch REST API方式批量插入数据
elasticsearch REST API方式批量插入数据 1:ES的服务地址 http://127.0.0.1:9600/_bulk 2:请求的数据体,注意数据的最后一行记得加换行 { &quo ...
-
Influx Sql系列教程六:insert 修改数据
在influxdb中没有专门的修改数据的update语句,对于influxdb而言,如果想修改数据,还是得使用我们前面的说到的insert来实现,那么怎么判断一条insert语句是插入还是修改呢? 1 ...
-
phalcon: update修改数据却变成了insert插入数据
phalcon: 在对表进行操作是,update修改数据却变成了insert插入数据. 发现,update的时,无论怎么加where都会变成了insert插入数据. 检查了一下表,原来是表没有 主键引 ...
-
Influx Sql系列教程七:delete 删除数据
前面介绍了使用insert实现新增和修改记录的使用姿势,接下来我们看一下另外一个简单的使用方式,如何删除数据 1. delete 语句 delete的官方语法如下 DELETE FROM <me ...
-
MySQL基础教程——创建数据库并插入数据
本节将介绍 MySQL 新建数据库,新建表,插入数据以及基本数据类型的相关知识.本节实验将创建一个名为 mysql_shiyan 的数据库,其中有两张表 employee和 department. 1 ...
-
Influx Sql系列教程五:insert 添加数据
接下来开始进入influxdb的curd篇,首先我们看一下如何添加数据,也就是insert的使用姿势 在进入本篇之前,对于不了解什么是retention policy, tag, field的同学,有 ...
-
mysql:insert插入数据过慢如何解决,设置innodb_flush_log_at_trx_commit为0就能解决
问题: 最近在做性能测试,造数据,发现insert好慢,只有几十条每秒,很奇怪,最后再网上找到了原因. 网文如下: MY SQL insert 速度过慢 最近在用MySQL做存储,测试中发现插入数据太 ...
-
Mysql常用sql语句(22)- insert 插入数据
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 终于讲完基础的查询语句了...这篇讲的就是插入数 ...
-
insert插入数据
insert 语法1 --插入的值需要用单引号引起来,否则字段插入会有问题,可能造成查询的时候查询不出结果 insert into 表名 (列名1,列名2……) ] values ( '值1' ...
随机推荐
-
oracle中number类型的数据使用as string 得到的值为null
1,如果数据的运行时类型(和数据库字段类型相同)不是字符串类型,比如number/date等,将ds.Tables[0].Rows[i][j] 调用 as string 时,不管 这个字段是否有值,这 ...
-
linux 批量重命名文件
模拟结果文件路径结构大概是:/当前目录/模型名/字模型名模拟/模拟温度/模拟结果文件. 模拟结果文件命名时相同的.模拟结果文件需要修改模拟结果文件的后缀名. 附shell脚本: find -type ...
-
Tomcat服务器配置文件uri编码设置
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" ...
-
05_Elasticsearch 单模式下API的增删改查操作
05_Elasticsearch 单模式下API的增删改查操作 安装marvel 插件: zjtest7-redis:/usr/local/elasticsearch-2.3.4# bin/plugi ...
-
fpga串口通信
---恢复内容开始--- 1.波特率的计算公式:9600bps 是指每秒可以传输9600位 则一位需要的时间为1/9600 约等于0.000104 开发板晶振大小为50M则传输一位需要的时间为 0.0 ...
-
JavaScript复制文本探究
JS复制文本基本分为两步-First: 选中需要复制的节点,及选区:Second: 执行document.execCommand('copy')命令复制 对于选区,属于HTMLInputElement ...
-
IntelliJ IDEA快捷键与使用小技巧
IntelliJ Idea 常用快捷键列表 修改方法如下: 点击 文件菜单(File) –> 点击 设置(Settings… Ctrl+Alt+S), –> 打开设置对话框. 在左侧的导航 ...
-
dart字符串处理
1.字符串创建(1)使用单引号,双引号创建字符串(2)使用三个引号或双引号创建多行字符串(3)使用r创建原始raw字符串(转义字符等特殊字符会输出出来,而不会自动被转义) (1)例如:String s ...
-
【Ansible 文档】【译文】模版(Jinja2)
Templating (Jinja2) 正如在 variables 部分描述的那样, Ansible 使用Jinja2模版来启用动态表达式和访问变量. Ansible 扩展了许多 filtes 和 t ...
-
Java 注释类之常用元注解
Java 注释类之常用元注解 自定义Java注释类时,我们使用方式如下: @Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD ...