带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(5)

简介: 带你读《Elastic Stack 实战手册》之26:——3.4.2.11.Index alias(5)

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.11.Index alias(4) https://developer.aliyun.com/article/1230375



路由别名

 

将路由字段绑定到对应的别名,通过别名操作时,会执行默认的路由规则,也可以理解为索引的另外一种“视图”。使用路由别名,在一定程度提升写入和查询的性能,结合过滤别名,可以让操作发送到准确的分片上。

 

如下示例首先创建一个索引,因为本文演示的 Elasticsearch 集群只有两个数据节点,为了方便观察,设置副本数目为 0,主分片数目设置为 2。


PUT /routing-index-000001
{
  "settings" :{
    "index":{
      "number_of_shards":2,
      "number_of_replicas": 0
    }
  },
  "mappings": {
    "properties": {
      "user": {
        "properties": {
          "id": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

创建一个路由别名routing-index-alias1绑定索引routing-index-000001。


POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "routing-index-000001",
        "alias": "routing-index-alias1",
        "routing": "2"
      }
    }
  ]
}

创建成功之后,使用别名进行的所有操作,都将以 2 计算路由地址,使用别名写入一个文档。


PUT routing-index-alias1/_bulk
{"index":{}}
{"user.id":"kimchy"}


除了创建一个路由别名,也可以用索引在写入文档时,后面加上路由参数;往routing-index-000001索引写入两个文档,并指定路由参数为 12。


PUT routing-index-000001/_bulk?routing=12
{"index":{}}
{"user.id":"tom"}
{"index":{}}
{"user.id":"jerry"}

通过查看GET _cat/shards/routing-index-000001?v&h=index,shard,prirep,docs,node,可以发现routing=12的文档被写到了 1 号分片,routing=2的文档被写到了 0 号分片。

 

index                shard prirep docs node
routing-index-000001  1     p         2 es-cn-n6w24fib900797tgz-29e2dafd-0003
routing-index-000001  0     p         1 es-cn-n6w24fib900797tgz-29e2dafd-0001

为了验证结果是不是这样的,我可以执行以下 3 种查询进行验证。前两个查询的是等效的,都是以 2 为计算路由值,将返回user.id为kimchy一个文档;第三个查询语句将返回以routing=12写入的文档。


GET /routing-index-alias1/_search
GET /routing-index-000001/_search?routing=2
GET /routing-index-000001/_search?routing=12

查询的时候,使用别名查询或者查询参数指定路由值,查询效果是等价的。routing的值并不一定要等于2,只要满足hash函数计算出来的结果一样,定位到分片结果一致。为了保证能够正确查询到文档,建议routing的值和写入的值保持一致。

 

除了统一设置一个routing,还可以分别设置对不同动作生效的路由。

 

如下面分别设置查询路由(search_routing)和写入路由(index_routing),使用别名进行操作,查询请求会发送到路由值 12 和 2 对应的分片,写入操作只会写入路由12对应的分片。


POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "routing-index-000001",
        "alias": "routing-index-alias2",
        "search_routing": "12,2",
        "index_routing": "12"
      }
    }
  ]
}


如上代码块所示search_routing可以由多个以逗号分隔的路由值,index_routing只能有一个值。

 

其实这也比较好理解,写入的时候,通过一个路由值计算数据,应该写到具体哪个分片,如果写入有多个路由值,将无法确定写入到哪一个分片;一个给定的分片上,可以有很多拥有不同路由值的文档,因此在查询的时候可以写多个路由值。

 

使用路由别名查询并且参数重新指定routing值;若search_routing的和路径参数routing的个数大于 2,则取两者的交集作为路由参数;若小于等于2且没有交集,则取search_routing的值(写入路由同理)。如下代码是查询不到任何文档的,因为其取交集后的路由值为 2,而包含tom这个文档写入的路由值为 12,所以将查询到对应的内容。

 

GET /routing-index-alias2/_search?q=user.id:tom&routing=2

 

正如所预期的一样返回内容如下:


{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
"hits" : [ ]
  }
}



《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.11.Index alias(6) https://developer.aliyun.com/article/1230372

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
弹性计算 监控 API
新浪微博上云实践:极端流量下的峰值应对与架构挑战
在混合云架构中,核心关键是专线,它是实现内部与公有云之间弹性的核心。目前微博和阿里云之间已经拉通了多条专线,日常的核心消息通过多机房的消息组件同步到阿里云缓存中,实现前端层面和缓存层面的弹性伸缩。在混合云的模式下,微博目前采用了两种部署方案。
9365 0
|
8月前
|
机器学习/深度学习 人工智能 资源调度
万亿参数、混合线性架构、开源免费——Ring-2.5-1T 来了,思考模型卷到新高度
蚂蚁inclusionAI发布开源万亿参数思考模型Ring-2.5-1T,首创混合线性注意力架构,实现“快、深、长”三大突破:推理吞吐提升3倍+,IMO/CMO达金牌水平,可在Claude Code中连续2小时开发可运行的迷你操作系统。MIT协议完全开源。
897 21
万亿参数、混合线性架构、开源免费——Ring-2.5-1T 来了,思考模型卷到新高度
|
7月前
|
存储 监控 Java
Java内存管理之道——从堆栈到GC的深度解析
对于Java开发者而言,内存管理是一道绕不开的关卡。与C/C++需要手动管理内存不同,Java引入了自动垃圾回收(GC)机制,极大降低了内存管理的复杂度。
258 3
|
9月前
|
存储 机器学习/深度学习 弹性计算
阿里云8核16G云服务器收费标准、可选实例规格、价格、应用场景测评
阿里云8核16G云服务器属于中高端算力配置,仅在ECS云服务器系列推出对应规格,无轻量应用服务器版本,1:2的CPU与内存配比让它能兼顾高算力输出和基础内存需求,是中小企业核心业务和大型企业轻量负载的常用选择。2026年该配置的收费标准随实例类型、计费方式、地域选择有明显差异,优惠活动则围绕长期购买折扣、地域专属福利展开,整体定价和福利均贴合不同业务的实际使用需求,适配企业高并发Web服务、中型数据库部署、视频编码、机器学习推理等多种场景。
697 10
|
9月前
|
人工智能 运维 监控
智能体来了:AI Agent 时代技术从业者的焦虑拆解与能力重构指南
本文剖析AI Agent兴起引发的职业焦虑,指出其本质是技术范式从“工具调用”跃迁至“自主系统”的价值重构。文章拆解智能体四大工程能力,定义“AI Agent搭建师”新角色,提出三维转型路径,助力开发者从功能实现者升级为智能系统设计者。(239字)
613 5
|
4月前
|
人工智能 安全 Serverless
云计算发展趋势全景解读:2026年技术决策者需要关注什么?
云计算正在从"基础设施搬迁"转向"智能化运行时"。AI原生架构、边缘混合部署、FinOps精细化治理、数据主权合规和零信任安全是当前五条主线,技术决策者需要从业务场景出发,重新审视云架构的选型逻辑。
|
4月前
|
存储 人工智能 文字识别
企业落地AI知识库的费用
AI企业知识库开发费用无统一标准,主要取决于方案选择(SaaS低代码/开源定制/全私有化)、数据规模、安全要求与业务复杂度。费用涵盖一次性研发(3万–15万+)、持续算力(Token/向量服务)及数据处理成本。建议先MVP验证,理性评估私有化必要性。(239字)
|
8月前
|
Linux 数据安全/隐私保护
银河麒麟V10安装 minizip-1.2.11-20.ky10.x86_64.rpm 教程(含依赖解决)
本指南详解在银河麒麟V10(x86_64)系统上安装minizip RPM包的完整流程:先验证系统版本与架构,定位下载的RPM包;推荐使用dnf/yum自动解决依赖安装;最后用rpm -q验证安装成功。步骤清晰,兼顾新手与进阶用户。

热门文章

最新文章