es里面提供了两种批量建索引的方法:
1,使用 Bulk Api 特点是:使用比较简单,但控制不够灵活
2,使用Bulk Processor 特点是:使用稍麻烦,控制非常灵活
至于为什么要批量建索引,相信大伙已经不陌生了,为的就是提高写入效率,效率,效率!
数量大的情况下,10ms性能的提升,都有可能带来巨大的优化效果,所以时时刻刻考虑系统的性能无疑是
一个优秀的工程师必须具备的一种素质。
下面来看下在Java中,具体怎么用:
(一)关于Bulk Api用法,这里直接引用es官网的例子了,大伙请直接看截图:
(二)使用Bulk Processor处理也比较简单,注意参数的设置,会影响索引的性能: BulkProcessor实例初始化之后,就可以直接
游标读取添加就行:
/**单例批量处理实例*/
static BulkProcessor bulkProcessor=null;
/** 初始化批量配置属性,符合其中一些条件,即会触发批量操作*/
public static void initBulkProcessor()throws Exception{
bulkProcessor=BulkProcessor.builder(client, new BulkProcessor.Listener() {
@Override public void beforeBulk(long id, BulkRequest req) {
System.out.println("id: "+id+" req: "+req);//发送请求前,可以做一些事情
}
@Override public void afterBulk(long id, BulkRequest req, Throwable cause) {
System.out.println("id: "+id+" req: "+req+" cause: "+cause.getMessage());//发送请求失败,可以做一些事情
}
@Override public void afterBulk(long id, BulkRequest req, BulkResponse rep) {
System.out.println("id: "+id+" req: "+req+" rep: "+rep);//发送请求成功后,可以做一些事情
}
}).setBulkActions(30000)//达到批量3万请求处理一次
.setBulkSize(new ByteSizeValue(100, ByteSizeUnit.MB))//达到20M批量处理一次
.setConcurrentRequests(10)//设置多少个并发处理线程
.setFlushInterval(TimeValue.timeValueSeconds(50))//设置flush索引周期
.build();//构建BulkProcessor
}
/**关闭es的bulk请求**/
public static void closeESBulk(){
try{
bulkProcessor.awaitClose(3, TimeUnit.MINUTES);//阻塞至所有的请求线程处理完毕后,断开连接资源
}catch(Exception e){
e.printStackTrace();
}
}
/**批量建索引伪代码**/
public static void rebuildIndex(){
//使用游标读取mongo或者其他的数据库,然后就可以添加数据
while(new ArrayList<String>().iterator().hasNext()){
Map<String, Object> map=new HashMap<String, Object>();//单条数据使用map组装
bulkProcessor.add(new IndexRequest("index", "type","主键id").source(map));
}
closeESBulk();//关闭批量操作
}
建立索引时,可以关闭索引的副本功能,可以极大提高写入效率,但索引完成时,可以执行如下命令动态,添加副本:
curl -XPUT 'localhost:9200/company/_settings' -d '{ "index" : { "number_of_replicas" : 2} }'
最后欢迎大家扫码关注微信公众号:我是攻城师(woshigcs),我们一起学习,进步和交流!(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!
- 大小: 49.3 KB
分享到:
相关推荐
ElasticSearch Java API 中文文档 ElasticSearch Java API 中文文档
ES(elasticSearch6.4.0)之java API源码demo-完整注释版,本版本为上一demo版本升级版,封装了ES的javaAPI,支持了模糊查询,排序查询,解析,分页查询等功能,如果有问题请留言。我会及时回复。
ElasticSearch 官方 java API
分布式搜索elasticsearch java API 之(六)--- 批量添加删除索引 9 分布式搜索elasticsearch java API 之(七)--- 与MongoDB同步数据 10 分布式搜索elasticsearch java API 之(八)--- 使用More like this实现...
基于Elasticsearch2.1.1的JavaAPI基本操作代码示例
elasticsearch官网给的java API太过于片面,自己深究用java写的工具类集合,包括mapping创建,批量插入,聚合,模糊查询,精确查询等功能。
elasticsearch离线JAVA API文档下载
基于Elasticsearch Java API的参考手册
Java做客户端对Elasticsearch服务的增删改查及批量修改操作,代码简洁易懂,思路清晰有注释.详情参考https://blog.csdn.net/linhaiyun_ytdx/article/category/7042758
提供ESAPI jar包下载 esapi-2.1.0.1.jar
elasticsearch5.5.1的javaapi,含创建索引、mapping、查询、增加删除文档
Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。 ElasticSearch提供javaAPI,使用者可以...
根据es2.3官方api写的简单的小例子,与大家分享,各个例子都进行过Junit测试。
该资源为Elasticsearch5.x版本的java操作API手册,基本方法都可以从里面找到,有需要的程序猿可自行下载;
esapi-2.1.0.1.zip(esapi-2.1.0.1.jar)
标签:elasticsearch、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Elasticsearch 5.1.1 java api maven工程,完整jar包在es5/target/dependency目录下
标签:elasticsearch、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
标签:elasticsearch、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Elasticsearch Java api 工具类,包括增删改查索引,增删改查数据等代码,欢迎下载