从ES数据库中随机抽样10%的数据

Elasticsearch 实现索引抽样查询 需求 对索引中的数据随机抽样 DSL实现 通过采样script脚本排序的方式进行实现 { "from": 0, "size": 20, "timeout": "60s", "query": { "match_all": { "boost": 1 } }, "sort": [ { "_script": { "script": { "source": "Math.random()", 阅读详情

如果数据量比较小,从 Elasticsearch 数据库中随机抽取 10% 的数据,可以使用以下步骤来实现:

  1. 使用 Elasticsearch 的 Search API 搜索数据库中的数据。
  2. 使用 QueryBuilder 构建查询语句,并指定要查询的索引和类型。
  3. 在查询中添加一个随机排序的子句,例如:
queryBuilder.addSort(new FieldSortBuilder("_doc").order(SortOrder.ASC).sortMode(SortMode.RANDOM));

  1. 使用 SearchResponse 执行查询,并使用 SearchHits 获取查询结果。
  2. 使用 SearchHits 的 getTotalHits 方法计算总共有多少文档符合查询条件。
  3. 计算出 10% 的数量,并使用 SearchHits 的 getHits 方法获取查询结果,只取前 10% 个文档即可。
    以下是一个示例方法,该方法可以实现上述步骤:
public List<Map<String, Object>> sampleData(String index, String type, int sampleSize) {
    // 1. 使用 Elasticsearch 的 Search API 搜索数据库中的数据
    SearchRequest searchRequest = new SearchRequest(index);
    searchRequest.types(type);

    // 2. 使用 QueryBuilder 构建查询语句,并指定要查询的索引和类型
    QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();

    // 3. 在查询中添加一个随机排序的子句
    queryBuilder.addSort(new FieldSortBuilder("_doc").order(SortOrder.ASC).sortMode(SortMode.RANDOM));

    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(queryBuilder);
    searchRequest.source(searchSourceBuilder);

    // 4. 使用 SearchResponse获取前10%的数据
    //todo

如何处理大量数据的情况

如果要处理的数据量很大,可能会对 Elasticsearch 的性能造成压力。 为了解决这个问题,可以使用 Elasticsearch 的 Scroll API。

Scroll API 可以用来执行批量查询,它会在内部使用滚动查询,允许在一个查询中搜索大量的数据,并将结果分批返回。这样,您就可以在单个查询中处理大量的数据,而不会对 Elasticsearch 造成太大的压力。

下面是一个示例方法,该方法使用 Scroll API 来实现随机抽样:

public List<Map<String, Object>> sampleDataWithScroll(String index, String type, int sampleSize) {
    List<Map<String, Object>> result = new ArrayList<>();

    // 1. 使用 Elasticsearch 的 Search API 搜索数据库中的数据
    SearchRequest searchRequest = new SearchRequest(index);
    searchRequest.types(type);

    // 2. 使用 QueryBuilder 构建查询语句,并指定要查询的索引和类型
    QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();

    // 3. 在查询中添加一个随机排序的子句
    queryBuilder.addSort(new FieldSortBuilder("_doc").order(SortOrder.ASC).sortMode(SortMode.RANDOM));

    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(queryBuilder);
    searchRequest.source(searchSourceBuilder);

    // 4. 使用 SearchResponse 执行查询
    SearchResponse searchResponse = client.search(searchRequest);

    // 5. 使用 SearchHits 获取查询结果
    SearchHits hits = searchResponse.getHits();

    // 6. 使用 SearchHits 的 getTotalHits 方法计算总共有多少文档符合查询条件
    long totalHits = hits.getTotalHits();

    // 7. 计算出 10% 的数量
    int sampleCount = (int) (totalHits * sampleSize);

    // 8. 设置滚动参数
    String scrollId = searchResponse.getScrollId();
    searchRequest.scroll(TimeValue.timeValueMinutes(1));

    while (result.size() < sampleCount) {
	    searchResponse = client.searchScroll(new SearchScrollRequest(scrollId).scroll(TimeValue.timeValueMinutes(1)));
	    hits = searchResponse.getHits();
	
	    // 9. 使用 SearchHits 的 getHits 方法获取查询结果,只取前 10% 个文档
	    for (int i = 0; i < hits.getHits().length && result.size() < sampleCount; i++) {
	        result.add(hits.getAt(i).getSourceAsMap());
	    }
	
	    // 10. 更新滚动 ID
	    scrollId = searchResponse.getScrollId();
	}

}
十亿级订单系统的数据库查询性能优化之路 因为ES是团队应用相对成熟的中间件,出于学习、开发成本考虑。 阅读详情

相关推荐

Qt6导入QtChart绘制图表(添加组件)

我在按照大佬们的说明添加QtChart时发现,我的电脑上并不能正确的添加QtChart并编译通过,所以在综合了两位大佬的说明又自己探索了一番后,正确编译通过,分享出来,以便同志们节省一些时间。

Nuaa0719301zyx的博客 2951

es 随机查询几条

es

有趣的难受 975

电子货架标签应用浅析(ESL)

​【 关注与分享,是对原创最大的鼓励 】 年底了,会断续介绍几个主要的BLE的应用及市场情况,这篇文章介绍的是电子货架标签, ESL (Electronic Shelf Label)。 文章将从应用简介,市场规模,产业链,头部玩家及系统框架进行介绍。只对技术感兴趣的可以直接拉到底。 ESL简介 ESL,是一种显示产品,其主要是替代传统的纸质标签,应用于大型商超,...

iotthings的博客 4691

ES中如何实现随机抽样查询

索引中有几千万的数据,现在需要每次查询随机抽样返回10条数据,怎么实现?

弹指天下 7720

YOLOv8知识蒸馏实战:用BCKD和LD在自制数据集上分别提点1.63%和1.69%的保姆级教程

本文详细介绍了在YOLOv8模型上应用知识蒸馏技术(BCKD和LD方法)的实战教程,通过自制数据集实现性能提升1.63%和1.69%。内容涵盖环境配置、模型选择、BCKD和LD的具体实现及调参技巧,适合目标检测领域的开发者和研究者。

weixin_29082143的博客 245

用迅为RK3588开发板DIY无人机飞控:从电路设计到PID调参全记录

本文详细记录了使用迅为RK3588开发板DIY无人机飞控的全过程,从硬件选型、PCB设计到实时系统构建和PID调参。RK3588核心板凭借其强大的AI算力和丰富接口,成为高性能无人机控制解决方案的理想选择。文章还分享了视觉导航系统集成和实际飞行测试经验,为硬件爱好者提供实用参考。

weixin_29053577的博客 434

GOLANG ES 自定义查询脚本 随机抽取几条数据

go语言操作es,如何随机排序查询结果,或自定义查询脚本

拒绝八股文从我做起 1517

AI市场风起云涌,ai浏览器是最佳的落地项目,现在ai市场的ai浏览器竞争加剧,得ai浏览器者得天下!

从场景覆盖度来看,AI 浏览器已突破 “网页浏览” 的传统边界,成为连接个人生活、工作、消费的 “超级入口”,这是其他 AI 应用难以比拟的落地优势。在个人生活场景,AI 浏览器可基于用户行为数据主动提供服务 —— 当用户浏览马拉松赛事信息时,浏览器能自动生成 “训练计划 + 装备推荐 + 能量补给方案”,并关联预订链接;在工作场景,Opera Neon 浏览器已实现 “网页内容提取 - 代码生成 - 报告撰写” 的全流程辅助,开发者可直接在浏览器内完成网站开发初稿;

zhang9880000的博客 1086

Elasticsearch:随机采样器聚合 - Random sampler aggregation

​ random_sampler 聚合是一个单桶聚合,它在聚合结果中随机包含文档。 采样以准确性为代价提供了显着的速度改进。 抽样是通过在分片中提供整个文档集的随机子集来完成的。 如果在搜索请求中提供了过滤器查询,则该过滤器将应用于采样子集。 因此,如果过滤器是有限制性的,则可能只有很少的文档匹配; 因此,统计数据可能不那么准确。...

Elastic 中国社区官方博客 1599

实测338MB/s!FPGA与CYUSB3014的Slave FIFO模式实战避坑(附完整固件与源码)

本文详细介绍了FPGA与CYUSB3014在Slave FIFO模式下实现338MB/s高速数据传输的实战经验。通过优化硬件设计、固件配置和GPIF II接口设置,解决了USB3.0双向通信中的关键性能瓶颈,并提供了完整的固件与源码参考。

weixin_30570101的博客 458

运算放大器电路中的T型网络:如何用更小电阻实现高增益并降低噪声?

本文深入解析了运算放大器电路中T型反馈网络的设计与应用。该网络通过三个较小阻值电阻的组合,等效实现高增益,有效规避了传统大反馈电阻带来的显著热噪声问题。文章从数学原理、噪声定量分析到实际设计技巧,系统阐述了如何利用T型网络在实现高增益的同时,显著降低电路噪声并改善整体性能。

banana的博客 318

oracle 随机抽样sample使用说明

这两天发了一个贴子,寻找比较好的办法随机取出表的一条记录地址见:http://www.oracle.com.cn/viewthread.php?tid=130433&extra=page%3D1里面讨论了一些方法,其中版主valenwon加一个ROWNUM的字段并加索引是一种相对比较有效的方法,只是要改表结构,在测试库中可以,在生产库中就不行了,本文介绍了一下ORACLE SAMPLE语法的应用,

enchanterblue的专栏 1460

【项目实战】YOLOV5 +实时吸烟目标检测+手把手教学+开源全部

本原创项目长期更新,旨在完成校园异常行为实时精检测,做到集成+N次开发+优化(不止局限于调包)为止,近期将不断更新以下模型+数据+标注文件+教程。关注博主,Star 一下github,一起开始美妙的目标检测之路吧~~ 文章目录本原创项目长期更新,旨在完成校园异常行为实时精检测,做到集成+N次开发+优化(不止局限于调包)为止,近期将不断更新以下模型+数据+标注文件+教程。关注博主,Star 一下github,一起开始美妙的目标检测之路吧~~一、项目展示二、项目资源共享1:训练图片:香烟图片+吸烟手势+烟雾三、

cv君的博客 13万+

oracle随机抽样

需求是这样的:程序每隔几个小时,从表中取100个数据,监测其正确性。 按照正常的写法,每次取出的结果都是一样的。 select * from base_part where rownum<10,因为oracle每次的执行计划都是一样的,数据扫描方法顺序都是一样的,所以返回的结果也都是一样的。 随机取...

weixin_30838921的博客 234

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数据库抽样数据显示

数据库抽样数据显示

qq690452074的专栏 609

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ES11-ES向量检索-RAG

ES11-ES使用向量检索-RAG

感谢所有乐于奉献的人,在此不一一具名 241

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Oracle随机抽样sample使用说明

下面是SAMPLE语法的使用示例:   选择10%的记录   select * from t1 sample(10)   选择0.1%的记录   select * from t1 sample(0.1)   根据数据块选择1%的记录   select * from t1 sample block(1)   使用数据块选择与使用记录行选择的区别:使用数据块选

imlpf的专栏 8077

使用 Elasticsearch 进行抽取式 QA

使用 Elasticsearch 进行抽取式 QA 本教程系列将涵盖txtai的主要用例,这是一个 AI 驱动的语义搜索平台。该系列的每章都有相关代码,可也可以在colab 中使用。 colab 地址 安装依赖 安装txtai和Elasticsearch. # Install txtai and elasticsearch python client pip install txtai elasticsearch # Download and extract elasticsearch wget http

发呆的比目鱼的博客 1563

AcousticSense AI开源大模型:提供CCMusic-Database子集下载与数据预处理脚本

本文介绍了如何在星图GPU平台上自动化部署AcousticSense AI:视觉化音频流派解析工作站镜像,实现音乐流派的精准识别与可视化解析。用户可快速构建音频分析环境,典型应用于音乐分类、流派混合分析及声学特征教学演示,显著提升音频AI实验与内容理解效率。

weixin_33256096的博客 155

Elasticsearch分布式事务与一致性:四种核心方案与实战解析

分布式事务与数据一致性是构建可靠分布式系统的核心挑战,尤其在搜索与分析场景中。其原理在于通过协调多个独立的数据操作,确保它们要么全部成功,要么全部失败,从而维护数据的完整性与业务逻辑的正确性。这项技术的价值在于,它使得在分布式架构下处理如订单创建、库存扣减等复杂业务成为可能,保障了关键数据的准确性。在搜索引擎、实时分析等应用场景中,数据一致性直接影响用户体验与决策可靠性。本文聚焦于Elasticsearch这一主流分布式搜索引擎,深入探讨其最终一致性模型下的工程实践。针对【订单状态同步】与【库存扣减】等典型

weixin_33755649的博客 394

【金仓数据库征文】MySQL至金仓KES异构数据库平滑迁移与性能深度调优实战

本文详细记录从零开始将MySQL数据库迁移至人大金仓KingbaseES(KES)的完整过程。通过本地环境搭建,涵盖KES安装部署、兼容性检测、表结构适配、自定义函数实现、全量数据迁移、增量同步等关键步骤。重点解决了语法兼容性问题(如分页、JSON查询优化),并针对性能瓶颈进行参数调优和索引优化。实践表明,经过针对性适配和优化后,KES在核心业务场景性能可达到或超过MySQL水平。

2401_87042472的博客 1万+

Python数据读取实战:从CSV到数据库的高效处理技巧

数据读取是数据分析流程中的基础环节,直接影响后续处理的准确性和效率。Python生态提供了丰富的工具链,从pandas的read_csv基础操作到SQLAlchemy的数据库统一接口,覆盖了结构化文本、Excel、数据库等常见数据源。在工程实践中,编码问题、内存管理和异常处理是三大核心挑战,通过合理的参数配置(如encoding/chunksize)和工具选型(如modin并行处理)可显著提升稳定性。特别是在处理企业级数据时,需要建立包括数据类型校验、抽样验证在内的质量控制机制,避免因原始数据问题导致的分析

weixin_32678995的博客 322

CDC数据同步实战:解决搜索与详情页数据不一致的架构方案

在分布式系统架构中,数据一致性是核心挑战之一,尤其在高并发场景下,数据异步复制导致的延迟问题会直接影响业务决策和用户体验。变更数据捕获(CDC)技术通过监听数据库日志(如MySQL的binlog),将数据变更作为事件流实时捕获,实现了从被动轮询到主动订阅的模式转变。这一技术原理解决了传统双写和定时任务方案中的延迟与一致性问题,其技术价值在于为搜索、推荐、风控等对数据新鲜度要求极高的场景提供了秒级一致的架构基石。通过构建从源数据库到消息队列再到下游存储(如Elasticsearch)的完整流水线,CDC确保了

weixin_33847182的博客 337

数据库备份恢复验证测试全流程指南

数据库备份是数据安全的重要保障,但未经验证的备份可能隐藏致命风险。备份验证测试通过完整性检查、可读性测试、结构验证和关键表抽样等步骤,确保备份文件可恢复且数据一致。在MySQL等关系型数据库中,验证测试能有效保障RTO(恢复时间目标)符合SLA要求,避免生产环境出现数据灾难。典型应用场景包括定期恢复演练、备份策略变更验证和数据库版本升级后的兼容性测试。通过自动化脚本实现3-2-1恢复验证法则(库级→表级→行级检查),可系统化提升备份可靠性。

weixin_42523670的博客 204
上一篇: ES删除脚本-记录
Lana啦啦啦
博客等级 码龄9年 5粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值