elasticsearch 别名,elasticsearch使用场景

首页 > 经验 > 作者:YD1662022-11-04 04:20:36

序言

Elasticsearch提供了很多开发与运维便利的特性,很多特性看起来微不足道,需要时感慨真是卧虎藏龙。以下围绕Elasticsearch提供的别名特性展开,主要探讨几个方面:

elasticsearch 别名,elasticsearch使用场景(1)

别名本质是一种内置代理

需求背景

早期基于Lucene自主开发搜索应用,定期重新生成索引,之后应用访问平滑的切换,需要做一大堆的辅助工作,后接触到Elasticsearch,提供了索引别名特性,很容易完成切换。

应用场景

Elasticsearch提供了两种别名机制:

索引别名

Elasticsearch索引本质上是个虚拟的空间,本后的实际数据存储查询都是由分片完成,索引访问索引本身也是通过索引代理实现,可以这样理解,默认索引别名就是索引名称本身。

索引别名,应用在索引访问层面。

在应用系统中,索引需要定期维护,如索引重建,重建时为了不影响线上系统应用,一般会重新创建新的索引,待新索引数据重建完成,就需要无缝的替换掉原有索引,这个时候就需要引入索引别名

elasticsearch 别名,elasticsearch使用场景(2)

索引重建切换

互联网行业中,典型的如电商订单场景,有实时订单与历史订单;常规设计有实时订单索引与历史订单索引分开,实时索引存储最近未完成的订单数据,如最近30天内;历史索引则相当于全量的订单数据,相比实时会有一些延迟,历史的数量非常的庞大,一般也会拆分成很多个索引,访问历史索引数据可以通过别名来指定,绑定所有历史索引,而不用人工指定索引查询,这带来了很便利。

elasticsearch 别名,elasticsearch使用场景(3)

历史订单索引别名绑定隔离

索引创建多了,集群需要管理更多的元数据,消耗更多的管理节点资源,如果索引本身数量不是很大,可以将很多数据合并到一个索引中,对外采用多别名的方式隔离,每个别名仅限其中某些类型的数据访问。

elasticsearch 别名,elasticsearch使用场景(4)

别名绑定索引内部隔离,某电商商品内部隔离

字段别名

字段别名,更容易理解,应用在字段访问层面。

在传统关系型数据库中,由于业务原因,早期设计数据表时,字段与业务的映射是基于某种场景需求,后期又增加了更多的数据字段,原来的字段命名与新的会有很多奇异,造成一些开发与设计困扰,在Elasticsearch中,一样有此问题,所以可以通过字段别名替代,消除这种歧义。

技术实现

Elasticsearch提供的别名API非常简单,相当容易理解。

索引别名

#为索引myindex_001创建别名myindex PUT /myindex_001/_alias/myindex #原有索引访问方式 GET myindex_001/_search #通过别名访问方式 GET myindex/_search

#为索引myindex_001~005 绑定相同别名 myindex PUT myindex_001/_alias/myindex PUT myindex_002/_alias/myindex PUT myindex_003/_alias/myindex PUT myindex_004/_alias/myindex PUT myindex_005/_alias/myindex #通过别名访问所有索引 GET myindex/_search

elasticsearch 别名,elasticsearch使用场景(5)

单个索引别名绑定多个索引

#创建索引myuser_001的别名userid_12,限定访问user_12的数据 PUT /myuser_001/_alias/user_12 { "routing" : "12", "filter" : { "term" : { "user_id" : 12 } } } #通过别名访问所有索引 GET user_12/_search

字段别名

#创建字段别名索引 mytrips_001 PUT mytrips_001 { "mappings": { "properties": { "distance": { "type": "long" }, "route_length_miles": { "type": "alias", "path": "distance" }, "transit_mode": { "type": "keyword" } } } } #填充数据 POST mytrips_001/_doc { "distance":200, "transit_mode":"huoche" } #字段别名限制查询 GET /mytrips_001/_search { "query": { "range" : { "route_length_miles" : { "gte" : 110 } } } } 注意事项

索引别名

索引别名确实相比过去自主实现切换确实代理了很多便利,但也不可以大规模混乱使用,使用时注意几点

字段别名

字段别名限制在查询领域,若是数据更新还是需要更新原有的数据字段,否则会出错。

结语

课程

Elasticsearch产品很注重实战便利,一方面降低了我们原有应用系统的复杂度,一方面减少了我们产品接入的成本。Elastic Stack是一个很庞大的数据产品系列,自主学习需要花费很多精力与金钱,为此我们设计了很多对应课程系列,面向多种用户层面,面向企业客户,面向个体用户。 [《ES训练营第一期:Elastic入门到进阶实战》](https://ke.qq.com/course/2328146?tuin=d3fd9a94)是我们面向个体用户最简单的课程系列之一。课程内容来源于我们的实际工作中提炼,与当下很多课程属于学院派不一样,我们知晓项目实际运用的需求。

加入我们的课程VIP学习计划

内容

内容来源于笔者实际工作中运用多种技术栈实现场景需求,得出的一些实战经验与总结思考,提供后来者借鉴参考,请勿抄袭,内容原创,转载请注明。

关于

李猛(ynuosoft),Elastic-stack产品深度用户,通过Elastic工程师认证,2012年接触Elasticsearch,对Elastic-Stack技术栈开发、架构、运维等方面有深入体验,实践过多种Elastic项目,最暴力的大数据分析应用,最复杂的业务系统应用;业余为企业提供Elastic-stack咨询培训以及调优实施;多年实战经验,爱捣腾,擅长大数据,机器学习,系统架构领域。

深圳星图智能 星图智能是Elastic官方MSP技术合作伙伴

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.