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

ElasticSearch索引别名的应用

个人博客:无奈何杨(wnhyang)

个人语雀:wnhyang

共享语雀:在线知识共享

Github:wnhyang - Overview


Elasticsearch 索引别名是一种极为灵活且强大的功能,它允许用户为一个或多个索引创建逻辑上的别名。这些别名用途广泛,涵盖查询、索引操作以及索引管理等多个方面。以下为一些常见的索引别名应用场景:

简化查询

通过创建别名,用户能够以更简洁的名称访问一个或多个索引。例如,若你有一个索引名为products_2024,可创建别名current_products以简化查询流程:

POST /_aliases
{"actions": [{ "add": { "index": "products_2024", "alias": "current_products" } }]
}

在执行查询时,只需使用别名:

GET /current_products/_search
{"query": {"match": { "category": "electronics" }}
}

如此一来,不仅使查询语句更为简洁,也降低了因索引名称变更而需大规模修改查询代码的风险,提高了代码的可维护性。

索引版本管理

当需要滚动更新索引(如按月或按年创建新索引)时,别名可用于指向当前活跃的索引。这种方式下,用户仅需更新别名,而无需对查询代码进行修改。

  1. 创建索引和别名
PUT /products_2024
{"aliases": {"current_products": {}}
}
  1. 创建新索引并切换别名
PUT /products_2025
{"aliases": {"current_products": {}}
}
POST /_aliases
{"actions": [{ "remove": { "index": "products_2024", "alias": "current_products" } },{ "add": { "index": "products_2025", "alias": "current_products" } }]
}

通过这种方式,实现了索引版本的平滑过渡,保证了业务查询的连续性,极大地减少了因索引更新带来的系统影响。

处理索引重建和升级

在对现有索引进行重建或升级(如更改映射或设置)时,可先创建新索引,再通过别名切换至新索引,从而确保服务不中断。

  1. 创建新索引
PUT /products_v2
{"mappings": {"properties": {"new_field": { "type": "text" }}}
}
  1. 切换别名
POST /_aliases
{"actions": [{ "remove": { "index": "products_v1", "alias": "products" } },{ "add": { "index": "products_v2", "alias": "products" } }]
}

这种操作方式使得索引重建和升级过程对业务的影响降至最低,保证了系统的稳定性和可用性。

执行多索引查询

用户可为多个索引创建一个别名,借此通过该别名对多个索引执行查询操作。例如,假设有多个分区索引,如logs_2023_01、logs_2023_02,可创建别名logs_2023以查询这些索引:

POST /_aliases
{"actions": [{ "add": { "index": "logs_2023_01", "alias": "logs_2023" } },{ "add": { "index": "logs_2023_02", "alias": "logs_2023" } }]
}

查询时,只需使用logs_2023作为索引名称:

GET /logs_2023/_search
{"query": {"match": { "status": "error" }}
}

这一功能在处理大规模数据查询时,能够显著提高查询效率,减少重复查询操作。

隔离读写操作

通过为写入操作和读取操作分别设置不同别名,可有效隔离读写操作。例如,设置别名write_index用于索引新数据,设置别名read_index用于搜索查询:

POST /_aliases
{"actions": [{ "add": { "index": "logs_2024", "alias": "write_index" } },{ "add": { "index": "logs_2023", "alias": "read_index" } }]
}

在更新时切换写入别名:

POST /_aliases
{"actions": [{ "remove": { "index": "logs_2023", "alias": "write_index" } },{ "add": { "index": "logs_2024", "alias": "write_index" } }]
}

这种隔离机制有助于提高系统性能,防止写操作对读操作产生性能干扰。

数据迁移

在将正常运行集群中的索引迁移到另外一个索引时,使用索引别名可以做到无须停机操作。例如,假设要将old_index迁移至new_index ,可以先为new_index添加与old_index相同的别名,应用程序在迁移过程中依然通过该别名进行访问,待数据迁移完成,删除old_index以及其相关别名,不会影响业务的正常运行。具体操作如下:

  1. 为新索引添加别名
POST /_aliases
{"actions": [{ "add": { "index": "new_index", "alias": "old_index" } }]
}
  1. 数据迁移完成后,删除旧索引别名
POST /_aliases
{"actions": [{ "remove": { "index": "old_index", "alias": "old_index" } }]
}
  1. 删除旧索引
DELETE /old_index

索引分组管理

可以将多个索引进行分组,以便于更好的管理。例如,假设有一系列与销售数据相关的索引,sales_2023_q1、sales_2023_q2、sales_2023_q3、sales_2023_q4 ,可以为它们添加一个统一的别名sales_2023,对这一年度的销售数据索引进行统一管理。操作如下:

POST /_aliases
{"actions": [{ "add": { "index": "sales_2023_q1", "alias": "sales_2023" } },{ "add": { "index": "sales_2023_q2", "alias": "sales_2023" } },{ "add": { "index": "sales_2023_q3", "alias": "sales_2023" } },{ "add": { "index": "sales_2023_q4", "alias": "sales_2023" } }]
}

之后在进行涉及全年销售数据的查询、统计等操作时,直接使用sales_2023别名即可,方便快捷。

索引子集创建

给索引创建类似于视图的子集。例如,在一个包含大量用户信息的索引users中,若只想对特定年龄段(如 18 - 30 岁)的用户数据进行操作,可以创建一个过滤器别名。假设索引中有age字段,操作如下:

  1. 创建过滤器别名
POST /_aliases
{"actions": [{"add": {"index": "users","alias": "young_users","filter": {"range": {"age": {"gte": 18,"lte": 30}}}}}]
}
  1. 使用过滤器别名查询
GET /young_users/_search
{"query": {"match_all": {}}
}

此时通过young_users别名查询,返回的结果就只会是符合年龄范围的用户数据。

Elasticsearch 索引别名实现读写分离

Elasticsearch 的索引别名功能可用于实现读写分离,这是一种常见的架构模式,有助于提升系统的可伸缩性和性能。在实际应用中,读写分离可确保写操作不会影响读操作的性能,同时可利用多索引分散读取负载。

实现读写分离的基本思路
  1. 写入索引

    • 新的写入操作被路由至一个单一的写入索引。
    • 该索引通常为最新的索引,专门用于接收新的数据写入。
  2. 读取索引

    • 读取操作被路由至一个或多个读取索引。
    • 读取索引可包括最新的写入索引以及其他已关闭写入操作的旧索引。
  3. 使用别名

通过使用别名,可将写入操作路由至写入索引,同时将读取操作路由至读取索引组。

实际应用案例

假设拥有一个日志聚合系统,每天创建一个新索引以存储当天的日志数据。需确保写入操作仅发生在最新的索引上,而读取操作可分布到多个索引上。

  1. 步骤 1:创建索引和别名

    • 创建写入索引

      • 创建名为logs_2024-08-01的索引。
      • 创建别名write_index,使其指向logs_2024-08-01。
    • 创建读取索引组

      • 创建别名read_index_group,最初指向logs_2024-08-01。
  2. 步骤 2:写入数据

所有的写入操作都通过write_index别名进行,这些操作会被路由到logs_2024-08-01。

  1. 步骤 3:读取数据

读取操作通过read_index_group别名进行,最初同样指向logs_2024-08-01。

  1. 步骤 4:滚动索引

    • 创建新的写入索引

      • 创建新索引logs_2024-08-02。
      • 更新write_index别名,使其指向logs_2024-08-02。
    • 更新读取索引组

      • 将logs_2024-08-02添加到read_index_group别名中。
      • 若有需要,可将旧索引logs_2024-08-01从read_index_group别名中移除。
示例命令

假设已创建logs_2024-08-01和logs_2024-08-02索引,且希望更新别名以实现读写分离:

  1. 创建写入索引别名
curl -X POST "localhost:9200/_aliases" -H 'Content-Type: application/json' -d'
{"actions": [{ "add": { "index": "logs_2024-08-01", "alias": "write_index" } }]
}
'
  1. 创建读取索引组别名
curl -X POST "localhost:9200/_aliases" -H 'Content-Type: application/json' -d'
{"actions": [{ "add": { "index": "logs_2024-08-01", "alias": "read_index_group" } }]
}
'
  1. 滚动索引
curl -X POST "localhost:9200/_aliases" -H 'Content-Type: application/json' -d'
{"actions": [{ "remove": { "index": "logs_2024-08-01", "alias": "write_index" } },{ "add": { "index": "logs_2024-08-02", "alias": "write_index" } },{ "add": { "index": "logs_2024-08-02", "alias": "read_index_group" } }]
}
'

总结

  1. 写入索引 ( write_index ) :用于接收新的写入操作。
  2. 读取索引组 ( read_index_group ) :用于分散读取操作的负载。
  3. 滚动索引:定期更新别名,确保新的写入操作被路由到最新的索引,同时保持读取操作分布在多个索引上。

这种方式在高并发和大数据量的场景下,能够有效提升系统的性能和可伸缩性。

写在最后

拙作艰辛,字句心血,望诸君垂青,多予支持,不胜感激。


个人博客:无奈何杨(wnhyang)

个人语雀:wnhyang

共享语雀:在线知识共享

Github:wnhyang - Overview

相关文章:

ElasticSearch索引别名的应用

个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview Elasticsearch 索引别名是一种极为灵活且强大的功能,它允许用户为一个或多个索引创建逻辑上…...

C++和OpenGL实现3D游戏编程【连载21】——父物体和子物体模式实现

欢迎来到zhooyu的专栏。 🔥C和OpenGL实现3D游戏编程【专题总览】 1、本节要实现的内容 上节课我们已经创建了一个基础Object类,以后所有的游戏元素都可以从这个基类中派生出来。同时为了操作方便,我们可以为任意两个Object类(及其…...

Mac苹果电脑 怎么用word文档和Excel表格?

以下是详细步骤,帮助你在 MacBook 上安装和使用 Word 和 Excel: 安装 Microsoft Office 你可以通过以下几种方式在 MacBook 上安装 Word 和 Excel: 方法一:应用安装 pan.baidu.com/s/1EO2uefLPoeqboi69gIeZZg?pwdi2xk 方法二…...

使用AI生成金融时间序列数据:解决股市场的数据稀缺问题并提升信噪比

“GENERATIVE MODELS FOR FINANCIAL TIME SERIES DATA: ENHANCING SIGNAL-TO-NOISE RATIO AND ADDRESSING DATA SCARCITY IN A-SHARE MARKET” 论文地址:https://arxiv.org/pdf/2501.00063 摘要 金融领域面临的数据稀缺与低信噪比问题,限制了深度学习在…...

QT信号槽 笔记

信号与槽就是QT中处理计算机外设响应的一种机制 比如敲击键盘、点击鼠标 // 举例: 代码: connect(ls,SIGNAL(sig_chifanla()),ww,SLOT(slot_quchifan())); connect(ls,SIGNAL(sig_chifanla()),zl,SLOT(slot_quchifan()));connect函数:这是…...

【计算机网络】传输层协议TCP与UDP

传输层 传输层位于OSI七层网络模型的第四层,主要负责端到端通信,可靠性保障(TCP),流量控制(TCP),拥塞控制(TCP),数据分段与分组,多路复用与解复用等,通过TCP与UDP协议实现…...

UE控件学习

ListView: item设置:使能在list设置为Entry类 关闭listview自带的滑动条 【UEUI篇】ListView使用经验总结 UE4 ListView用法总结(二)Item的选中与数据获取 Grid Panel: 常用作背包,每个格子大小可不相…...

ThinkPHP 8的多对多关联

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...

Linux内核编程(二十一)USB驱动开发

一、驱动类型 USB 驱动开发主要分为两种:主机侧的驱动程序和设备侧的驱动程序。一般我们编写的都是主机侧的USB驱动程序。 主机侧驱动程序用于控制插入到主机中的 USB 设备,而设备侧驱动程序则负责控制 USB 设备如何与主机通信。由于设备侧驱动程序通常与…...

【Block总结】WTConv,小波变换(Wavelet Transform)来扩展卷积神经网络(CNN)的感受野

论文解读:Wavelet Convolutions for Large Receptive Fields 论文信息 标题: Wavelet Convolutions for Large Receptive Fields作者: Shahaf E. Finder, Roy Amoyal, Eran Treister, Oren Freifeld提交日期: 2024年7月8日arXiv链接: Wavelet Convolutions for La…...

深入探究分布式日志系统 Graylog:架构、部署与优化

文章目录 一、Graylog简介二、Graylog原理架构三、日志系统对比四、Graylog部署传统部署MongoDB部署OS或者ES部署Garylog部署容器化部署 五、配置详情六、优化网络和 REST APIMongoDB 七、升级八、监控九、常见问题及处理 一、Graylog简介 Graylog是一个简单易用、功能较全面的…...

构建高可用和高防御力的云服务架构第五部分:PolarDB(55)

引言 云计算与数据库服务 云计算作为一种革命性的技术,已经深刻改变了信息技术行业的面貌。它通过提供按需分配的计算资源,使得数据存储、处理和分析变得更加灵活和高效。在云计算的众多服务中,数据库服务扮演着核心角色。数据库服务不仅负…...

【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活

💬 欢迎讨论:如对文章内容有疑问或见解,欢迎在评论区留言,我需要您的帮助! 👍 点赞、收藏与分享:如果这篇文章对您有所帮助,请不吝点赞、收藏或分享,谢谢您的支持&#x…...

HTTP / 2

序言 在之前的文章中我们介绍过了 HTTP/1.1 协议,现在再来认识一下迭代版本 2。了解比起 1.1 版本,后面的版本改进在哪里,特点在哪里?话不多说,开始吧⭐️! 一、 HTTP / 1.1 存在的问题 很多时候新的版本的…...

【深度学习】利用Java DL4J 训练金融投资组合模型

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…...

跨域cookie携带问题总结

背景 我们知道很多场景,都需要前端请求带上cookie,例如用户鉴权、登陆校验等。而有些场景下,我们会发现请求不会带上cookie,这是为什么呢? 概念 cookie是种在域名下的信息。只有请求同域且同站的请求,才…...

Pytorch使用教程(12)-如何进行并行训练?

在使用GPU训练大模型时,往往会面临单卡显存不足的情况。这时,通过多卡并行的形式来扩大显存是一个有效的解决方案。PyTorch主要提供了两个类来实现多卡并行:数据并行torch.nn.DataParallel(DP)和模型并行torch.nn.Dist…...

指针之旅:从基础到进阶的全面讲解

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文(1)内置数…...

FPGA与ASIC:深度解析与职业选择

IC(集成电路)行业涵盖广泛,涉及数字、模拟等不同研究方向,以及设计、制造、封测等不同产业环节。其中,FPGA(现场可编程门阵列)和ASIC(专用集成电路)是两种重要的芯片类型…...

PostgreSQL 中进行数据导入和导出

在数据库管理中,数据的导入和导出是非常常见的操作。特别是在 PostgreSQL 中,提供了多种工具和方法来实现数据的有效管理。无论是备份数据,还是将数据迁移到其他数据库,或是进行数据分析,掌握数据导入和导出的技巧都是…...

Taotoken的TokenPlan套餐如何实现更经济的模型调用

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken的TokenPlan套餐如何实现更经济的模型调用 1. 理解TokenPlan的计费模式 在模型应用开发过程中,成本的可预测性…...

从‘文件夹’到对象列表:手把手教你用MinIO Java Client实现灵活的文件查询与过滤

从‘文件夹’到对象列表:手把手教你用MinIO Java Client实现灵活的文件查询与过滤在当今数据驱动的时代,对象存储已成为现代应用架构中不可或缺的一部分。MinIO作为高性能、兼容S3协议的开源对象存储解决方案,凭借其轻量级和易用性赢得了众多…...

利用DiSEqC协议与AVR单片机驱动卫星天线电机改造户外设备

1. 项目概述:用卫星天线电机驱动一切如果你手头有一些需要承受风吹日晒、还得精确转动的设备,比如一个户外的大型定向天线,或者一个需要定期调整角度的太阳能板支架,甚至是一个坚固的监控云台,你可能会为驱动机构发愁。…...

华硕笔记本终极性能控制指南:用G-Helper完全替代Armoury Crate

华硕笔记本终极性能控制指南:用G-Helper完全替代Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zen…...

PentestGPT实战部署指南:AI驱动的渗透测试工作流落地

1. 这不是另一个“AI安全”的概念玩具,而是一套能真正跑起来的渗透测试辅助工作流“PentestGPT”这个名字刚在GitHub上出现时,我第一反应是点开又关掉——过去三年里,我见过太多打着“AI渗透”旗号的项目:有的只是把ChatGPT API封…...

为什么软件开发偏爱 Linux?深度剖析 Linux 相较于 Windows 的核心优势

引言 在软件开发的世界里,一个有趣的现象是:无论是大型互联网公司的服务器集群,还是资深程序员的个人开发机,Linux 操作系统的身影无处不在。与之形成鲜明对比的是,尽管 Windows 在个人消费市场占据绝对主导地位&…...

基于双T振荡器的正弦波LED调光电路设计与实践

1. 项目概述:用双T振荡器实现正弦波LED调光最近在捣鼓一些氛围灯项目,总感觉用单片机PWM做的呼吸灯效果有点“硬”,那种线性的明暗变化看久了难免审美疲劳。于是翻出以前模拟电路的老本行,琢磨着能不能用纯硬件的方式,…...

告别CAJ格式困扰:3分钟学会用开源工具将知网文献转为PDF

告别CAJ格式困扰:3分钟学会用开源工具将知网文献转为PDF 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换,成功与否,皆是玄学。 项目地址: https://gitcode.com/…...

厨房空调技术白皮书:从风冷到水冷,制冷系统在厨房场景中的工程化演进

厨房空调是暖通行业近三年技术迭代最密集的细分品类。从最初的"凉霸"(本质是风扇),到风冷分体式,再到水冷一体式,每代技术都在解决上一代没有覆盖的用户痛点。本文以工程技术视角,梳理四代厨房制…...

双稳健机器学习:用正交性与交叉拟合解决因果推断中的ML偏差

1. 项目概述:当机器学习遇见因果推断的“干扰”难题在实证研究的日常工作中,我们常常面临一个核心矛盾:我们真正关心的,往往只是一个或几个关键参数——比如一项政策对就业率的平均影响(平均处理效应,ATE&a…...