文档章节

elasticsearch批量导入数据重复问题

Brooo
 Brooo
发布于 2017/06/14 09:13
字数 339
阅读 560
收藏 0
package com.zhidou.es.export;

import com.zhidou.es.config.ExporES;
import com.zhidou.es.config.InitES;
import com.zhidou.es.util.DateUtil;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits;

import java.io.*;
import java.util.Date;


/**
 * description
 * Created by 08101 on 2017/6/5.
 */
public class ExportES {


    public void  getESinformatation()

    {
        Client client = InitES.initClient();
        SearchResponse response = client.prepareSearch("i_his_adas_data").setTypes("his_adas_data")
                .setQuery(QueryBuilders.matchAllQuery()).setSize(50000).setScroll(new TimeValue(600000))
                .setSearchType(SearchType.SCAN).execute().actionGet();//setSearchType(SearchType.Scan) 告诉ES不需要排序只要结果返回即可 setScroll(new TimeValue(600000)) 设置滚动的时间
        String scrollid = response.getScrollId();
        try {
            //把导出的结果以JSON的格式写到文件里
            BufferedWriter out = new BufferedWriter(new FileWriter("eseses", true));

            //每次返回数据10000条。一直循环查询直到所有的数据都查询出来
            while (true) {
                SearchResponse response2 = client.prepareSearchScroll(scrollid).setScroll(new TimeValue(1000000))
                        .execute().actionGet();
                SearchHits searchHit = response2.getHits();
                //再次查询不到数据时跳出循环
                if (searchHit.getHits().length == 0) {
                    break;
                }
                System.out.println("查询数量 :" + searchHit.getHits().length);
                for (int i = 0; i < searchHit.getHits().length; i++) {
                    String json = searchHit.getHits()[i].getSourceAsString();
                    out.write(json);
                    out.write("\r\n");
                }
            }
            System.out.println("查询结束");
            out.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public void insertESInformation(){


        Client client= ExporES.initClient();
        try {
            //读取刚才导出的ES数据
            BufferedReader br = new BufferedReader(new FileReader("eseses"));
            String json = null;
            int count = 0;
            //开启批量插入
            BulkRequestBuilder bulkRequest = client.prepareBulk();
            while ((json = br.readLine()) != null) {
                bulkRequest.add(client.prepareIndex("i_his_adas_data", "his_adas_data").setSource(json));
                //每一千条提交一次
                if (count% 10000==0) {
                    bulkRequest.execute().actionGet();
                    System.out.println(DateUtil.format(new Date())+"提交了:" + count);
                }
                count++;
            }
            bulkRequest.execute().actionGet();
            System.out.println("插入完毕");
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

 

 

 

/**
* description
* Created by 08101 on 2017/6/13.
*/
public class mainEs {

    public static void main(String[] args) {

        ExportES exportES=new ExportES();
        exportES.getESinformatation();
        exportES.insertESInformation();

    }
}

 

© 著作权归作者所有

Brooo
粉丝 0
博文 1
码字总数 339
作品 0
秦皇岛
私信 提问
加载中

评论(2)

寻梦2012
寻梦2012
如果还有重复的你试一下如下代码:
BulkRequestBuilder bulkRequest = client.prepareBulk();

while ((json = br.readLine()) != null) {
bulkRequest.add(client.prepareIndex("bigdata", "student").setSource(json));
//每一千条提交一次
if (count% 1000==0) {
bulkRequest.execute().actionGet();
bulkRequest = client.prepareBulk();

bulkRequest=client.prepareBulk();

System.out.println("提交了:" + count);
}
count++;
}
寻梦2012
寻梦2012
你这导入的数据还重复吗?
Elasticsearch _bulk批量导入数据问题

各位大神好,在下是Elasticsearch初学者,遇到如下问题 ,还请帮忙解答,不胜感激。 1 问题1,本人用如下命令批量导入数据到Elasticsearch: curl -XPOST http://192.168.6.64:9200/myindex...

余智君sir
2017/04/03
1K
2
Elasticsearch 入门: _bulk 批量导入数据

批量导入数据 使用 Elasticsearch Bulk API 批量 update 步骤: 需求:我希望批量导入一个 type 的名词列表到 index 索引。 准备数据: 根据官方文档,Json 数据要准备成这个格式的: 其中 ...

王兵
2018/05/10
0
0
ElasticSearch ik,elasticsearch-jdbc 使用 和 yii2 实例

1.ES安装+ik插件 mac安装和使用: a.由于ES为java开发 所以首先安装下载jdk,由于最新版本对jdk要求>1.8.0,所以可以通过brew 升级jdk b.brew 安装ES 启动 elasticsearch 后,在浏览器地址:127....

罗培海
2017/12/16
357
0
ES(elasticsearch)搜索引擎

ES(elasticsearch)搜索引擎 0、授人以渔,少走半年弯路! 死磕 Elasticsearch 方法论:普通程序员高效精进的 10 大狠招! 一、Elasitcsearch基础篇 1.1 Elasitcsearch基础认知 1、Elasticse...

Ocean_K
2018/09/11
1K
6
elasticsearch使用java api批量插入数据

使用java api批量插入数据,主要参考官网的api,主要是client和Document APIs-Index API部分。 pom依赖 主要代码 参考: https://www.elastic.co/guide/en/elasticsearch/client/java-api/cu...

cjun1990
2016/10/20
11.7K
5

没有更多内容

加载失败,请刷新页面

加载更多

mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
今天
9
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
今天
6
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
今天
8
0
Flutter 系列之Dart语言概述

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧 一、...

過愙
今天
5
0
rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部