当前位置: 首页 > article >正文

文章十六:ElasticSearch 使用enrich策略实现大宽表

基本原理Elasticsearch 的 Enrich 功能通过以下流程实现数据 enrichment首先基于源索引source index通过 Enrich Policy 提前生成中间缓存索引enrich index该缓存索引不支持实时或局部更新只能全局更新同时会对缓存索引进行优化以支持高效的反向查询。后续在目标索引target index的数据写入、更新或重建过程中系统会反向查询中间缓存索引将所需数据补充到目标索引中从而实现数据的丰富处理。在接下来的文章中使用的是出租车打车的两个数据来演示enrich进行大宽表的设计PUT green_tripdata_2026/_doc/1 { improvement_surcharge: 0.3, passenger_count: 1, payment_type: 2, tip_amount: 0, fare_amount: 8, timestamp: 2023-02-06T15:31:39.264196541Z, RatecodeID: 1, mta_tax: 0.5, store_and_fwd_flag: N, ehail_fee: null, tolls_amount: 0, lpep_pickup_datetime: 2020-12-31 23:57:51, VendorID: 2, trip_distance: 1.99, congestion_surcharge: 0, lpep_dropoff_datetime: 2021-01-01 00:04:56, total_amount: 9.3, trip_type: 1, PULocationID: 168, extra: 0.5, DOLocationID: 75 } PUT taxi_zone_2026/_doc/1 { LocationID: 33, service_zone: Boro Zone, timestamp: 2023-02-06T15:18:12.161902885Z, Borough: Brooklyn, Zone: Brooklyn Heights } PUT taxi_zone_2026/_doc/2 { LocationID: 75, service_zone: Boro Zone, timestamp: 2023-02-06T15:18:12.161902885Z, Borough: Brooklyn, Zone: Brooklyn Heights } PUT taxi_zone_2026/_doc/3 { LocationID: 168, service_zone: Boro Zone, timestamp: 2023-02-06T15:18:12.161902885Z, Borough: Brooklyn, Zone: Brooklyn Heights }实战案例展示在上面的 例子中我们的源数据source_data)就是taxi_zone这个数据创建enrich策略这里需要注意创建之后还没有执行也就是没有形成缓存的indexPUT _enrich/policy/taxi_zone_lookup_policy_001 { match: { indices: taxi_zone_2026, match_field: LocationID, enrich_fields: [ service_zone,Borough,Zone ] } }1. indices定义Enrich策略的**数据源索引**即用于提供补充信息的维表/字典索引所有匹配和字段补充操作均基于该索引的数据执行。2. match_field指定数据源索引中**用于匹配的关键字段**Enrich处理器将以此字段的值为依据与主数据中对应字段的值进行关联匹配。3. enrich_fields定义匹配成功后需要从数据源索引中**追加到目标文档中的字段列表**这些字段的值将被自动复制并补充到主数据中实现数据富化。执行策略就是生成缓存的enrich indexPOST _enrich/policy/taxi_zone_lookup_policy_001/_execute执行之后我们可以发现生成了索引。关于这里小编总结了一些他的特性Enrich 缓存索引由 Elasticsearch 内部自动创建属于系统级只读索引用户无需手动定义。该类索引受系统机制保护禁止手动直接删除手动删除操作会直接报错。执行_execute命令刷新 Enrich 策略时会生成全新版本的富化缓存索引。新版本缓存索引生效后旧索引会被标记为待删除由 ES 后台进程自动回收清理。常规运行状态下集群仅保留当前最新一份 Enrich 缓存索引不会无限堆积。若仅停用富化业务、保留 Enrich 策略不删除当前生效的缓存索引会永久留存。手动删除 Enrich 策略时该策略关联的所有版本缓存索引会同步自动清除。集群异常、策略执行中断等特殊场景可能产生残留的 Enrich 历史索引。残留富化索引可通过.enrich-*前缀匹配进行手动强制清理。Enrich 索引强依赖对应 Enrich 策略策略删除则无关联富化缓存索引。enrich结合ingest pipeline数据处理PUT _ingest/pipeline/green_taxi_pipeline { description: 使用enrich创建大宽表 , processors: [ { enrich: { policy_name: taxi_zone_lookup_policy_001, field: PULocationID, target_field: pickup_zone } }, { enrich: { policy_name: taxi_zone_lookup_policy_001, field: DOLocationID, target_field: dropoff_zone, max_matches: 1 } } ] }1.policy_name指定当前 enrich 处理器需要绑定的富化策略名称。该参数用于关联预先定义好的 enrich 策略处理器将依据策略中的匹配规则、数据源索引和补充字段完成数据富化。2.field指定待富化数据中用于关联匹配的字段。该字段的值会与 enrich 策略中定义的match_field进行等值匹配从而找到对应的维度数据并完成字段补充。3.target_field指定富化结果数据的存放目标字段。匹配成功后所有从维度表中补充的字段如区域、行政区、服务 zone会作为子字段存入该目标字段中。执行模拟测试POST _ingest/pipeline/green_taxi_pipeline/_simulate { docs: [ { _source: { improvement_surcharge: 0.3, passenger_count: 1, payment_type: 2, tip_amount: 0, fare_amount: 8, timestamp: 2023-02-06T15:31:39.264196541Z, RatecodeID: 1, mta_tax: 0.5, store_and_fwd_flag: N, ehail_fee: null, tolls_amount: 0, lpep_pickup_datetime: 2020-12-31 23:57:51, VendorID: 2, trip_distance: 1.99, congestion_surcharge: 0, lpep_dropoff_datetime: 2021-01-01 00:04:56, total_amount: 9.3, trip_type: 1, PULocationID: 168, extra: 0.5, DOLocationID: 75 } } ] }实战演示--数据更新:通过修改数据,有ingest中配置的enrich可以完成数据的更新和修改POST green_tripdata_2026/_update_by_query?pipelinegreen_taxi_pipeline { query: { match_all: {} } }实战演练--索引重建POST _reindex { source: { index:green_tripdata_2026 }, dest: { index: new_index, pipeline: green_taxi_pipeline } }实战演练--数据写入在直接进行数据的写入时可以指定POST write_index/_doc?pipelinegreen_taxi_pipeline { improvement_surcharge: 0.3, passenger_count: 1, payment_type: 2, tip_amount: 0, fare_amount: 8, timestamp: 2023-02-06T15:31:39.264196541Z, RatecodeID: 1, mta_tax: 0.5, store_and_fwd_flag: N, ehail_fee: null, tolls_amount: 0, lpep_pickup_datetime: 2020-12-31 23:57:51, VendorID: 2, trip_distance: 1.99, congestion_surcharge: 0, lpep_dropoff_datetime: 2021-01-01 00:04:56, total_amount: 9.3, trip_type: 1, PULocationID: 168, extra: 0.5, DOLocationID: 75 }可以在使用logstash写入时,指定pipeline参数:logstash这个知识在接下来的文章中会给大家详细的介绍一下.Enrich Node 数据处理节点配置:我们在使用enrich进行大宽表的生成的时候,会出现很多的反查的逻辑,为了集群的性能,我们可以将集群中的节点作为ingest节点,将其他节点的ingest角色直接禁用.

相关文章:

文章十六:ElasticSearch 使用enrich策略实现大宽表

基本原理Elasticsearch 的 Enrich 功能通过以下流程实现数据 enrichment:首先,基于源索引(source index)通过 Enrich Policy 提前生成中间缓存索引(enrich index),该缓存索引不支持实时或局部更…...

3个高效麦克风控制技巧:告别会议尴尬的专业解决方案

3个高效麦克风控制技巧:告别会议尴尬的专业解决方案 【免费下载链接】MicMute Mute default mic clicking tray icon or shortcut 项目地址: https://gitcode.com/gh_mirrors/mi/MicMute 在远程协作和在线会议成为工作常态的今天,麦克风管理已经成…...

如何在5分钟内为视频添加专业字幕:开源视频字幕生成工具终极指南

如何在5分钟内为视频添加专业字幕:开源视频字幕生成工具终极指南 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows 你是否曾…...

从 JDK 8 到 JDK 21:虚拟线程时代,是时候升级了

距离 JDK 8 发布已逾十年,它曾是 Java 生态最稳固的基石。但 2023 年发布的 JDK 21 带来了**虚拟线程(Virtual Threads)**这一革命性特性,标志着 Java 并发模型从"人工手动管控"迈向"JVM 智能托管"。本文将从…...

拯救内存:用Java原生FileUtils和CSV搞定海量数据分批导出(附完整避坑代码)

拯救内存:Java海量数据分批导出实战指南 引言:大数据导出的内存困境 最近在重构公司报表系统时,我遇到了一个典型的生产问题:当用户请求导出半年交易记录时(约200万条数据),服务频繁出现OOM崩溃…...

3步解锁浏览器自动化:用n8n-nodes-puppeteer告别手动操作

3步解锁浏览器自动化:用n8n-nodes-puppeteer告别手动操作 【免费下载链接】n8n-nodes-puppeteer n8n node for browser automation using Puppeteer 项目地址: https://gitcode.com/gh_mirrors/n8/n8n-nodes-puppeteer 你是否还在为每天重复的网页操作而烦恼…...

STM32智能光照监控DIY:当BH1750检测到光线过暗,蜂鸣器报警并OLED实时显示(源码开源)

STM32智能光照监控系统实战:从传感器到报警的完整实现 在智能家居和工业自动化领域,环境光照监控是一个基础但极其重要的功能。想象一下,当你需要确保实验室的精密仪器始终处于适宜光照环境中,或者希望为家中的植物提供恰到好处的…...

告别僵硬动画!用Unity BlendTree实现角色从走到跑的自然过渡(附完整C#脚本)

告别僵硬动画!用Unity BlendTree实现角色从走到跑的自然过渡(附完整C#脚本) 在独立游戏开发中,角色动画的流畅度往往决定了玩家的第一印象。你是否遇到过这样的尴尬场景:精心设计的角色在从行走切换到奔跑时&#xff0…...

从控制台观察 Taotoken 提供的 API 调用审计日志与安全价值

从控制台观察 Taotoken 提供的 API 调用审计日志与安全价值 1. 审计日志的核心功能 Taotoken 控制台的审计日志模块为企业管理员提供了完整的 API 调用记录可视化界面。该功能默认记录所有通过平台分发的 API Key 发起的请求,包括成功与失败的调用。每条日志包含以…...

WMS仓储管理系统操作培训

导语大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。欢迎大家使用我们的仓储物流技术AI智能体。专业书籍:《智能物流系统构成与技术实践》|《智能仓储项目英语手册》|《智能仓储项目必坑手册》|《智能仓储项目甲方必读》|《12大…...

5分钟快速上手:LaserGRBL激光雕刻软件的完整使用指南 [特殊字符]

5分钟快速上手:LaserGRBL激光雕刻软件的完整使用指南 🎯 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL LaserGRBL是一款专为GRBL固件优化的免费开源激光雕刻控制软件&#xf…...

扩散模型与潜在空间:AI图像生成的原理与自动化造梦实践

1. 项目概述:当AI学会“做梦”,一个开源项目的诞生最近在GitHub上闲逛,发现了一个挺有意思的项目,叫“auto-dream”。光看名字,Cat-tj这位开发者就挺会起名的,让人联想到“自动做梦”。这可不是什么玄学或者…...

PX4固件升级避坑指南:从FMUv2到FMUv3,以及如何正确选择Master/Beta/稳定版

PX4固件升级避坑指南:从FMUv2到FMUv3,以及如何正确选择Master/Beta/稳定版 当你手握一块Pixhawk飞控准备大展拳脚时,固件版本选择这个看似简单的环节往往藏着无数深坑。从Bootloader版本不匹配导致的内存识别错误,到测试版固件中某…...

EMPO2强化学习框架:记忆增强与策略优化技术解析

1. EMPO2方法概述 EMPO2(Enhanced Memory and Policy Optimization)是一种融合记忆增强机制与混合策略优化技术的强化学习新框架。这个方法的核心创新点在于解决了传统强化学习算法在长期依赖任务和稀疏奖励场景下的两大痛点:经验利用率低和策…...

专业级视频对比分析工具:高效实现画质评估与编码优化

专业级视频对比分析工具:高效实现画质评估与编码优化 【免费下载链接】video-compare Split screen video comparison tool using FFmpeg and SDL2 项目地址: https://gitcode.com/gh_mirrors/vi/video-compare 在视频编码、媒体处理和内容创作领域&#xff…...

QRazyBox终极指南:如何轻松修复损坏二维码的完整教程

QRazyBox终极指南:如何轻松修复损坏二维码的完整教程 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox QRazyBox是一款强大的二维码修复工具,专门解决因打印模糊、物理损…...

避坑指南:IPFS上传文件时如何选择chunker参数?不同设置对哈希和去重的影响实测

IPFS文件分块策略深度解析:如何通过chunker参数优化存储效率 当你在IPFS网络上存储一部4K纪录片或大型数据集时,系统会默默将文件分割成数百个数据块。有趣的是,相同的视频文件可能因为分块参数不同,在网络上产生完全不同的存储指…...

强化学习跨域泛化:SFT暖身与逐步推理技术解析

1. 强化学习中的跨域泛化挑战 在构建通用人工智能体的道路上,强化学习(Reinforcement Learning, RL)面临着跨域泛化(Cross-domain Generalization)这一核心挑战。想象一下,一个在虚拟厨房环境中训练出的机器…...

如何用Excalidraw Animate一键将静态图表变成动态演示:完整指南

如何用Excalidraw Animate一键将静态图表变成动态演示:完整指南 【免费下载链接】excalidraw-animate A tool to animate Excalidraw drawings 项目地址: https://gitcode.com/gh_mirrors/ex/excalidraw-animate 想让你的Excalidraw图表动起来吗?…...

联发科G85和高通骁龙4有啥区别?红米Note 12系列解锁Bootloader和Root的通用流程与芯片特例

联发科G85与高通骁龙4芯片深度解析及红米Note 12系列刷机实战指南 在智能手机硬件生态中,联发科(MediaTek)和高通(Qualcomm)始终占据着主导地位。红米Note 12系列作为小米旗下的性价比机型,同时采用了联发科…...

观察Taotoken在多模型并发调用下的路由表现

观察Taotoken在多模型并发调用下的路由表现 1. 测试环境搭建 为验证Taotoken平台在多模型并发调用场景下的路由能力,我们设计了一套模拟高并发测试方案。测试环境使用Python 3.9和asyncio库构建异步请求客户端,通过Taotoken统一API接口同时向多个主流模…...

F-MCP:基于MCP协议实现AI与Figma本地化协作的完整指南

1. 项目概述:F-MCP,一个连接AI与Figma的本地化桥梁 如果你是一名设计师或前端开发者,每天在Figma和代码编辑器之间反复横跳,肯定幻想过:能不能让AI直接理解我的设计稿,甚至帮我修改它?或者反过来…...

告别龟速下载!在Ubuntu/WSL2上5分钟搞定Aspera Connect 4.2.8,批量抓取NCBI的fastq数据

极速获取生物数据:WSL2环境下Aspera Connect高效部署与批量下载实战 生物信息学研究中,数据获取往往是项目推进的第一道门槛。传统下载工具在面对NCBI等大型数据库中的海量fastq文件时,常常显得力不从心——缓慢的下载速度、频繁的中断重连、…...

Aeona框架深度解析:构建Discord AI聊天机器人的架构设计与实战

1. 项目概述:Aeona,一个被低估的AI聊天机器人框架如果你在GitHub上搜索过“Discord bot”或者“AI chatbot”,大概率会刷到过deepsarda/Aeona这个仓库。乍一看,它可能只是又一个基于Discord.js的机器人项目,但当你真正…...

告别密码:用SSH密钥对给你的openEuler服务器加把“安全锁”

告别密码:用SSH密钥对给你的openEuler服务器加把“安全锁” 想象一下这样的场景:凌晨三点,你的手机突然收到服务器被暴力破解的告警。攻击者通过穷举密码的方式,已经尝试了上万次登录。虽然暂时没有成功,但这种如芒在背…...

AI智能体认知动力学:元认知架构如何让AI思考过程可观测与可预测

1. 项目概述:当AI智能体开始拥有“思考的轨迹” 如果你和我一样,长期关注AI智能体(AI Agent)领域,可能会有一个共同的感受:我们造出了很多能说会道的“演员”,但很难说它们真的在“思考”。大多…...

解锁团队协作新高度:搭建专属PlantUML Server实现高效图表设计

解锁团队协作新高度:搭建专属PlantUML Server实现高效图表设计 【免费下载链接】plantuml-server PlantUML Online Server 项目地址: https://gitcode.com/gh_mirrors/pl/plantuml-server 你是否经常在团队协作中遇到这样的困扰?团队成员各自使用…...

ClawCoder:为AI编码助手注入工程思维,实现项目理解与自动化重构

1. 项目概述:ClawCoder,为AI助手注入“工程思维” 如果你和我一样,长期在代码世界里摸爬滚打,肯定有过这样的体验:面对一个庞大的、陌生的项目仓库,AI助手虽然能帮你写几行代码,但它对项目的整体…...

Scroll Reverser终极指南:告别Mac多设备滚动方向混乱

Scroll Reverser终极指南:告别Mac多设备滚动方向混乱 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 还在为Mac上触控板和鼠标滚动方向不一致而烦恼吗?Sc…...

百灵快传:三步搞定手机电脑大文件传输的终极解决方案 [特殊字符]

百灵快传:三步搞定手机电脑大文件传输的终极解决方案 🚀 【免费下载链接】b0pass 百灵快传(B0Pass):基于Go语言的高性能 "手机电脑超大文件传输神器"、"局域网共享文件服务器"。LAN large file transfer tool。 项目地…...