带你读《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并实现搜索。  
相关文章
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
705 57
|
9月前
|
人工智能 数据可视化 机器人
智慧政务新范式:服务机器人关键技术解析与主流产品选型指南
随着“放管服”改革深化,政务机器人正从导览工具迈向“能办事”的智能化服务。依托神经符号AI、时空知识图谱与端侧VLM等技术,实现政策精准解读、动态更新与材料预审。猎户星空、优必选、科大讯飞等多款产品各具特色,推动政务服务向高效、智能、人性化转型。(238字)
395 5
|
9月前
|
传感器 人工智能 安全
【口碑排行】 甲方真实的投票:售后服务场景下,客户满意度最高的语音机器人品牌盘点
在2025大模型落地元年,语音机器人成为售后数字化转型关键。本文基于IDC、信通院等权威数据,从交互自然度、业务闭环、工程化交付三大维度,盘点主流服务品牌,助力企业选型实现降本增效与95%以上客户满意度双目标。
|
9月前
|
安全 Go PHP
快充充电器电压诱骗芯片PW6606
PW6606是受电设备端的快充协议芯片,作为“主动请求者”与充电器通信,探测其支持的电压档位,并通过PD、QC等协议请求所需高压(如9V/12V/20V),实现高效供电。广泛用于移动电源、DIY设备等,让普通设备安全获取快充电压,被称为“诱骗芯片”,实为合规协商,非真正欺骗。
|
数据库 索引
深入理解数据库索引技术:回表与索引下推详解
【10月更文挑战第23天】 在数据库查询性能优化中,索引的使用是提升查询效率的关键。然而,并非所有的索引都能直接加速查询。本文将深入探讨两个重要的数据库索引技术:回表和索引下推,解释它们的概念、工作原理以及对性能的影响。
877 3
|
缓存 前端开发 NoSQL
如何开发工程项目部管理系统中的进度管理板块(附架构图+流程图+代码参考)
本文介绍如何构建一个高效的工程项目进度管理板块,涵盖系统架构、数据模型、核心功能、业务流程及开发技巧。内容包含四个关键代码示例,便于快速落地开发,帮助解决进度不准与沟通不畅两大工程难题。
|
安全 关系型数据库 MySQL
MySQL安全最佳实践:保护你的数据库
本文深入探讨了MySQL数据库的安全防护体系,涵盖认证安全、访问控制、网络安全、数据加密、审计监控、备份恢复、操作系统安全、应急响应等多个方面。通过具体配置示例,为企业提供了一套全面的安全实践方案,帮助强化数据库安全,防止数据泄露和未授权访问,保障企业数据资产安全。
|
存储 弹性计算 监控
阿里云国际代理商购买无忧指南:如何省20%成本享专业服务
企业上云虽是数字化转型的必然选择,但高昂成本常让管理者犹豫。通过阿里云国际授权代理商采购,可享最高20%价格优惠及专业支持。文章解析代理商渠道价值、新用户购买指南、采购注意事项及长期成本管理策略,助企业通过正规渠道实现“购买无忧”,享受全生命周期技术支持与价格红利。选对合作伙伴,为未来竞争力投资。
820 2
|
消息中间件 缓存 NoSQL
Redis原理—5.性能和使用总结
本文详细探讨了Redis的阻塞原因、性能优化、缓存相关问题及数据库与缓存的一致性问题。同时还列举了不同缓存操作方案下的并发情况,帮助读者理解并选择合适的缓存管理策略。最终得出结论,在实际应用中应尽量采用“先更新数据库再删除缓存”的方案,并结合异步重试机制来保证数据的一致性和系统的高性能。
Redis原理—5.性能和使用总结
|
人工智能 搜索推荐 API
开启电商新征程:小红书API
小红书API作为连接社交与电商的桥梁,提供了丰富的工具,如商品详情、笔记详情和搜索API等,助力商家精准营销和用户体验提升。通过这些API,商家可以实时追踪市场动态、优化产品设计,并实现流量高效转化。新兴美妆品牌Glow Beauty和传统服饰企业经典风尚的成功案例展示了其巨大潜力。未来,AI技术与跨平台协作将进一步推动小红书API在电商领域的创新与发展。
1200 24

热门文章

最新文章