ES查询百万数据,分批写入CSV

es 大批量一次查询所有数据和大批量分页查询数据(使用srcoll scan) 一大批量分页查询数据: * 统计用户男女数量、总量、骑行次数等指标 */ public void userInfoIndicate(String adCode,Long orderStartTime, Long orderEndTime,Long userRegisterStartTime,Long userRegisterEnddTime, UserProfileBo ... 阅读详情

bom头信息要在把文件写到服务器中之前添加; 

 要不用微软的excel 打开 含汉字会乱码;

 /**
     * 滚动输出,首先要构造第一行的属性名称,然后滚动写入其他数据
     * 对于csv,每行的数据与数据之间用“,”间隔
     */
    @Test
    public void scroll() throws IOException {
        int size = 10000;  //设置每次滚动输出条数
        //创建文件存放路径
        String path = this.getClass().getResource("/").getPath()+"download/";
        File file = new File(path);
        if(!file.exists()){
            file.mkdirs();
        }
        String fileName = "scrollOutputTest.csv";
        FileWriter fw = new FileWriter(path+fileName);

//微软的excel文件需要通过文件头的bom来识别编码,所以写文件时,需要先写入bom头
        byte[] uft8bom={(byte)0xef,(byte)0xbb,(byte)0xbf};
        fw.write(new String(uft8bom));

        long startTime = System.currentTimeMillis();    //获取开始时间
        SearchResponse response = client.prepareSearch("twitter").setTypes("tweet")
                .addSort(SortBuilders.fieldSort("_doc"))
                .setSize(size).setScroll(new TimeValue(2000)).execute()
                .actionGet();
        //获取总数量
        long totalCount = response.getHits().getTotalHits();
        int page = (int) totalCount / size;
        System.out.println("totalCount:" + totalCount);

        String fields = getFields(response);
        //添加字段名称
        fw.write(fields);
        scrollOutputToCsv(response,fw);

        for (int i = 0; i < page-1; i++) {
            //再次发送请求,并使用上次搜索结果的ScrollId
            response = client.prepareSearchScroll(response.getScrollId())
                    .setScroll(new TimeValue(20000)).execute()
                    .actionGet();
            scrollOutputToCsv(response,fw);
        }
        fw.close();
        long endTime = System.currentTimeMillis();    //获取结束时间
        System.out.println("运行时间:"+(endTime-startTime)+"ms");
    }
//获取所有字段
    public String getFields(SearchResponse response){
        String fields = "";
        if(response.getHits().getTotalHits() !=0){
            Map<String,Object> map = response.getHits().getAt(0).getSourceAsMap();
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                String key = entry.getKey();
                fields += key+",";
            }
        }
        return fields.substring(0,fields.length()-1);
    }
    public static void scrollOutputToCsv(SearchResponse response,FileWriter fw) throws IOException {
        String values;
        for(int i = 0;i<response.getHits().getHits().length;i++){
            values = "";
            Map<String,Object> map = response.getHits().getAt(i).getSourceAsMap();
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                String value = entry.getValue().toString();
                values += value+",";
            }
            values = "\r\n"+values.substring(0,values.length()-1);
            fw.write(values);
        }
        fw.flush();
    }

 下载

es大于10000条数据-滚动查询(scroll) es大于10000条数据-滚动查询(scroll),总所周知,es一般查询只支持最多查询前1w条数据,很难受。想要一次查询你想要的数据,一些大数据的场景下,我们需要用到ElasicSearch的两种查询方式:==深度分页==或者==滚动查询==,我们今天使用的是滚动查询方式,因为需要一批次加载全部使用的数据 阅读详情

相关推荐

Java 中使用 ES 高级客户端库 RestHighLevelClient 清理百万级规模历史数据

[cleanESHistoryData] 定时任务-清理索引:[{}],时间:{}的历史文档数据成功,耗时{}ms”“[cleanESHistoryData] 定时任务-清理索引:[{}],时间:{}的历史文档数据失败,耗时{}ms”// 构造查询条件,指定查询的时间范围,每次最多写入1000条数据至内存,减轻服务器内存压力。“清理索引:[{}],时间:{} 至 {}的历史文档数据成功,耗时{}ms”“正在清理索引:[{}],时间:{} 至 {}的历史文档数据…// 构造滚动查询条件,继续滚动查询

weixin_42265148的博客 2614

迭代器模式 实现ES大量数据查询

数据从Mysql 迁移到 Es, Es查询数据默认fetch Size最大为10000条,如果查询超过1万条,需要通过scroll形式进行查询

法毅的博客 2311

PHP 百万数据生成压缩包下载

1.分批数据,防止数据库内存溢 2.生成多个csv文件 3.zip打包下载 //分批打包下载excel //导说明:因为EXCEL单表只能显示104W数据,同时使用PHPEXCEL容易因为数据量太大而导致占用内存过大, //因此,数据的输csv文件的格式输,但是csv文件用EXCEL软件读取同样会存在只能显示104W的情况,所以将数据分割保存在多个csv文件中,并且最后压缩成zip文件提供下载 function putCsv(array $head, $data, $ma

dddaren的博客 350

elasticsearch使用restHighLevelClient查询所有数据

elasticsearch使用restHighLevelClient查询分页数据 1.maven <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.4.3</version>

Art pursuer 8355

ElasticSearch篇——初始、认识、拿下ElasticSearch,一篇文章带你入门ES,涵盖ES概念,对比Solr,ES核心概念以及常见工具head、kibana安装和使用,保姆级教程!!!

一、学习背景曾经,如果我们在网页上查询某些数据,在输入框中输入部分内容,后台默认可能是通过SQL的模糊查询进行操作的。但是在现今的大数据时代,有几百万条数据,那么常规的模糊查询就非常的缓慢了,慢慢的演进来了索引,但是还是达不到大数据的要求。那么,就有必要学习一款分布式全文搜索引擎。那么ElasticSearch主要功能就是搜索,如果在某个网站上需要用到搜索功能基本上都是用的ElasticSearch二、ES的起源。

我热爱学习,也乐于分享。无论是科技前沿的洞见,还是生活中的小技巧,我都会在这里与你分享。我相信,知识就是力量,而分享则能让这份力量得到更好的传递。 8万+

php 导csv内存,php实现百万数据快速导CSV

php实现百万数据快速导CSV2020-12-09 18:01:36php实现百万数据这里使用了服务器的缓存来实现实现:一:建立测试表,并加入测试数据1:创建测试表这里我建了一个test表,字段分别为:id,name,age,email2:加入测试数据(1)首先手动向表中添加若干行数据然后执行如下命令批量添加数据INSERT INTO test (name,age,email) SELE...

weixin_29313239的博客 320

Elasticsearch滚动查询实战:Java客户端如何高效处理百万数据

本文深入探讨了在Java应用中利用Elasticsearch滚动查询高效导百万数据的实战方案。通过对比滚动查询与深度分页的差异,详细解析了其基于快照的强一致性机制与适用场景,并提供了基于现代Elasticsearch Java API Client的完整代码实现,涵盖性能调优、内存管理及生产环境下的异常处理与稳健性设计。

e3f4g5的博客 502

php实现百万数据快速导CSV

php实现百万数据这里使用了服务器的缓存来实现 实现: 一:建立测试表,并加入测试数据 1:创建测试表 这里我建了一个test表,字段分别为:id,name,age,email 2:加入测试数据 (1)首先手动向表中添加若干行数据 然后执行如下命令批量添加数据 INSERT INTO test (name,age,email) SELECT name,age,email FROM test; 多次执行上面的命令测试数据会呈指数增加,这样就可以得到很多测试数据 二:php实现导

huaweichenai的博客 812

10分钟上手!elasticsearch-head批量导入实战:从CSV到Elasticsearch零代码迁移方案

你是否还在为CSV数据导入Elasticsearch而编写复杂脚本?是否因数据格式错误导致迁移失败?本文将详解如何使用elasticsearch-head的CSV批量导入功能,无需编程基础即可完成数据迁移,让你10分钟内从Excel表格到Elasticsearch索引全流程通关。 ## 核心功能探秘:CSV Table模块解析 elasticsearch-head的CSV导入能力由[src/a...

gitblog_00113的博客 459

搜索引擎选择:Elasticsearch与Solr

Solr vs. Elasticsearch Apache Solr Apache Solr基于业界大名鼎鼎的java开源搜索引擎Lucene,Lucene更多的是一个软件包,还不能称之为搜索引擎,而solr则完成对lucene的封装,是一个真正意义上的搜索引擎框架。在过去的十年里,solr发展壮大,拥有广泛的用户群体。solr提供分布式索引、分片、副本集、负载均衡和自动故障转移和恢复功能。如果...

在此立一个IT职业上的flag:https://github.com/Zeb-D/my-review 1万+

php导1万条数据excel_PHP快速导百万数据CSV或者EXCEL文件

前言: 很多时候,因为数据统计,我们需要将数据库的数据到Excel等文件中,以供数据人员进行查看,如果数据集不大,其实很容易;但是如果对于大数集的导,将要考虑各种性能的问题,这里以导数据库一百万条数据为例,导时间不过20秒,值的学习的一种大数据方式。一、导思路需要考虑服务器内存需要考虑程序运行的最大时间缺少BOM头导致乱码的处理如果导数量过大,推荐使用循环导,每次循环这里以导...

weixin_39632212的博客 1011

Elasticsearch 概述

它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。由于内核相同,所以两者除了服务器安装、部署、管理、集群以外,对于数据的操作 修改、添加、保存、查询等等都十分类似。Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,它们会将该关键字即索引匹配到的所有网页返回:还有常见的项目中应用日志的搜索等等。总结他们的每个属性。

weixin_47071354的博客 1197

csv百万数据(2),使用浏览器下载导csv文件

1:测试数据200多万,项目使用,问题:打开csv文件后发现,文字乱码,暂时没解决,这里提供一个思路 2:csv工具类 package com.wptx.comm.config; import java.io.BufferedOutputStream; import java.io.File; import java.io.OutputStream; import java.io.Unsu...

good_luck10的博客 775

es elasticsearch6.x Java API 研究分享

为什么要用全文搜索搜索引擎 原因分析: 数据类型 全文索引搜索支持非结构化数据的搜索,可以更好地快速搜索大量存在的任何单词或单词组的非结构化文本。 例如 Google,百度类的网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,它们会将该关键字即索引匹配到的所有网页返回;还有常见的项目中应用日志的搜索等等。对于这些非结构化的数据文本,关系型数据库搜索不是能很好的支持。 索引的...

zhaoyang10的专栏 2029

java实战:实现百万数据

本文将介绍如何使用Java实现百万数据,同时考虑内存、CPU等性能指标。我们将探讨数据的基本流程,并展示一个简单的Java代码示例,该示例使用JDBC和数据库连接池来高效地处理大规模数据,并采用分页查询和资源管理等策略来优化性能。通过本文,可以了解到如何在Java应用程序中实现高效的数据,并确保系统资源的合理使用。

oandy0的博客 3378

PHP实现导百万数据

PHP+Mysql实现导百万数据

马先生的博客 700

Elasticsearch文档建模与批量写入实战:从映射设计到可搜索索引

Elasticsearch 是基于倒排索引的分布式搜索分析引擎,其核心价值在于支持全文检索、实时聚合与高并发查询。区别于关系型数据库的行存结构,ES 以文档为单位组织数据,强调字段类型定义、分词策略与反范式化建模。合理的 mapping 设计决定查询准确性与性能上限,而 Bulk API 则是保障海量数据高效写入的关键技术手段。本文聚焦真实业务场景——如电商商品索引构建,详解如何通过显式映射(Mapping)、文档建模(Document Modeling)和批量写入(Bulk API)打通搜索链路,规避动态

weixin_30252709的博客 366

opencsv操作CSV文件

1. CSV文件简介 现在好多的网站中导的文件会现一种csv文件,我们接下来学习一下csv文件的导方式。 CSV文件:Comma-Separated Values,中文叫逗号分隔值或者字符分割值,其文件以纯文本的形式存储表格数据。该文件是一个字符序列,可以由任意数目的记录组成,记录间以某种换行符分割。每条记录由字段组成,字段间的分隔符是其他字符或者字符串。所有的记录都有完全相同的字段序列,相当于一个结构化表的纯文本形式。 用文本文件、excel或者类似与文本文件的编辑器都可以打开CSV文件。 为了简化

yuzheh521的博客 3017
上一篇: ES原生语法查询
下一篇: EXCEL里多sheet页指定生成 饼状图、柱状图,折线图 或插入数据--JAVA
 Admin
博客等级 码龄8年 2789粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值