带你读《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.idkimchy一个文档;第三个查询语句将返回以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 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
605 57
|
5月前
|
人工智能 运维 监控
智能体来了:AI Agent 时代技术从业者的焦虑拆解与能力重构指南
本文剖析AI Agent兴起引发的职业焦虑,指出其本质是技术范式从“工具调用”跃迁至“自主系统”的价值重构。文章拆解智能体四大工程能力,定义“AI Agent搭建师”新角色,提出三维转型路径,助力开发者从功能实现者升级为智能系统设计者。(239字)
382 5
|
5月前
|
存储 消息中间件 监控
API集成方案:淘宝多店铺管理,统一运营!
本文探讨如何通过淘宝开放平台API集成,构建多店铺统一运营系统。解决数据分散、操作重复、协同困难等痛点,实现商品、库存、订单、会员及营销的集中管理与自动化操作,提升效率、降低成本,并为智能化决策提供支撑,助力电商规模化发展。(238字)
|
8月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
上下文选择器(迭代选择器):基于祖先或同胞元素选择一个元素 ID和类选择器:基于id#和class的属性值进行选择元素。 属性选择器:基于属性的有无和特征进行选择。 ①上下文选择器: 上下文选择器的语法格式:标签1 标签2{属性:值;} //注意:组合选择器和上下文选择器的区别,组合选择器以逗号隔开, 上下文选择器以空格隔开 ②特殊的上下文选择器 子选择器> : 语法格式:标签1>标签2 解释说明:标签1和标签2
454 1
|
JavaScript 前端开发 索引
js的循环中foreach、for in和for of的区别
js的循环中foreach、for in和for of的区别
610 0
|
5月前
|
缓存 JSON 数据安全/隐私保护
58 同城 item_search - 获取搜索数据接口对接全攻略:从入门到精通
58同城item_search接口是本地生活全品类信息检索核心,支持房产、招聘、二手车等多业务线筛选,具备实时性强、维度丰富、统一适配等特点。通过HTTPS+AppKey/Secret认证,返回JSON/XML格式数据,需配合city_list与item_get实现完整数据链路。本攻略涵盖权限申请、签名认证、Python对接、调试排错及生产优化,助力高效稳定接入。
|
6月前
|
安全 Go PHP
快充充电器电压诱骗芯片PW6606
PW6606是受电设备端的快充协议芯片,作为“主动请求者”与充电器通信,探测其支持的电压档位,并通过PD、QC等协议请求所需高压(如9V/12V/20V),实现高效供电。广泛用于移动电源、DIY设备等,让普通设备安全获取快充电压,被称为“诱骗芯片”,实为合规协商,非真正欺骗。
|
8月前
|
存储 消息中间件 缓存
redis
Redis:数字时代的“高速工作记忆”,以内存存储与丰富数据结构实现微秒级响应,广泛应用于缓存、会话管理、排行榜、消息队列等场景,兼具高性能与高扩展性,是现代应用架构不可或缺的性能加速器。
|
数据库 索引
深入理解数据库索引技术:回表与索引下推详解
【10月更文挑战第23天】 在数据库查询性能优化中,索引的使用是提升查询效率的关键。然而,并非所有的索引都能直接加速查询。本文将深入探讨两个重要的数据库索引技术:回表和索引下推,解释它们的概念、工作原理以及对性能的影响。
776 3
|
10月前
|
Web App开发 Ubuntu 算法
Ubuntu 20.04 LTS 版本发布,新特性、新布局
Ubuntu 20.04 LTS借助新的内核压缩算法,具有更快的启动速度,并带有大量新的图形驱动程序、软件和实用程序,使用体验会更好。
773 0

热门文章

最新文章