`
qindongliang1922
  • 浏览: 2182961 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117500
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125878
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59874
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71275
社区版块
存档分类
最新评论

ElasticSearch2.1的java api批量建索引方法

    博客分类:
  • ELK
阅读更多

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
3
2
分享到:
评论

相关推荐

    分布式搜索 elasticsearch 方案研究 - Java API

    总结, 本文详细介绍了使用 Java API 实现与 Elasticsearch 集群交互的方法, 包括连接集群、定义索引字段、索引数据、删除数据、搜索以及数据同步等方面的内容。这些技术对于构建高效稳定的搜索系统至关重要。

    elastic 6.2.4 java API tutorial

    Elasticsearch 6.2.4 提供了丰富的 Java API 来支持各种操作,如索引管理、文档处理、搜索功能等。本文将详细介绍这些 API 的功能以及如何在项目中正确地使用它们。 #### 二、Java API 组件介绍 ##### 2.1 客户端...

    【elasticsearch】- Learning elasticsearch

    可以使用 REST API 来索引单个文档或批量文档。 **2.2 不带 ID 索引** 如果未指定文档 ID,则 Elasticsearch 会自动生成一个唯一的 ID。 **2.3 检索文档** 可以通过提供文档 ID 或执行查询来检索文档。 #### 三...

    Elasticsearch 保姆级入门篇

    本篇文章将详细介绍 LOCAL 安装 Elasticsearch 和 Kibana,以及使用开发工具/ Java SDK 创建索引和搜索数据。 一、本地安装 要安装 Elasticsearch 和 Kibana,需要创建一个供它们使用的网络。这个网络将被用于 ...

    Spring Boot集成ElasticSearch实现搜索引擎的示例

    2.1 使用Spring Data与ElasticSearch的9300端口集成:Spring Data Elasticsearch提供了一套丰富的Repository接口,使得我们可以直接通过Java方法调用来操作ElasticSearch。配置完成后,Spring Boot会自动连接到默认...

    ES-utils开发工具.rar

    首先,ES-utils 是一个基于Java编写的库,它提供了丰富的API,旨在帮助开发者更高效地与Elasticsearch交互。通过这个工具,你可以轻松完成对ES集群的查询、索引管理、文档操作等一系列任务,显著提高开发效率。 ###...

    某电商管理后台系统设计与实现.rar

    采用Java作为主要开发语言,Spring Boot框架构建微服务架构,MySQL作为数据存储,Redis用于缓存,Docker进行容器化部署,Elasticsearch实现全文搜索引擎,前端则使用Vue.js进行页面开发。 1.2 微服务设计 通过将...

Global site tag (gtag.js) - Google Analytics