Solr Alias使用实践

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
简介: 本文作为Solr实践系列的一篇,主要介绍Alias别名的使用,这是Solr提供的非常重要的特性,通过几个简单的API即可享用。熟悉Alias的使用,可极大降低业务的开发复杂度。

HBase用户福利

新用户9.9元即可使用6个月云数据库HBase,更有低至1元包年的入门规格供广大HBase爱好者学习研究,更多内容请参考链接
云HBase增强版全文索引服务已经上线,提供更加丰富的查询场景,请参考链接

前言

设想您有没有遇到过这样的问题:
1、表变更
业务逻辑中设置了访问某个表A,突然有一天需要修改为表B,此时只能修改配置进行线上变更。
2、分库分表
业务大部分场景只访问最近一周的数据,可以每隔一周新建一张表来存储,这样可以确保高效的查询热数据。在这个场景中需要自己来维护表的创建和删除,带来一定的业务复杂性。

本文介绍的Alias(别名)将会完美的解决上面两个问题,通过内核级的支持大大简化业务逻辑。

适用场景

时间序列场景

业务数据具有明显的时间特性,可以基于时间来创建不同的索引,这样既能降低单个索引的大小,又能提升查询性能。整个过程中业务不需要自己维护索引创建和删除。

重建索引场景

在不影响已有索引查询下,重建新的索引,待索引建完后,指向新的索引访问。整个过程中业务不需要代码变更。

如何使用Alias

基本功能:Alias指向已有的索引表
curl "http://solrhost:8983/solr/admin/collections?action=CREATEALIAS&name=your_alias_name&collections=your_collection_name_A"

上面的url代表,创建一个Alias名为your_allias_name,其指向一个索引表your_collection_name_A。这样业务逻辑中可以只设置访问your_alias_name,内核会自动转发请求到真实的索引表上。假设某一天需要变更索引表名为your_collection_name_B,执行一次更改Alias命令。
删除Alias

curl "http://solrhost:8983/solr/admin/collections?action=DELETEALIAS&name=your_alias_name"

修改Alias

curl "http://solrhost:8983/solr/admin/collections?
action=ALIASPROP&name=your_alias_name&collections=your_collection_name_B"

这样,业务代码上不需要任何变更即可访问新的索引表。

高级功能:自动分表

内核级支持按照时间字段自动分表,大大简化业务逻辑。下面以具体的示例来介绍:业务要求以周为单位创建索引表,并且能够自动删除旧的索引表。

curl "http://solrhost:8983/solr/admin/collections?action=CREATEALIAS&name=your_alias_name&router.start=NOW-30DAYS/DAY&router.autoDeleteAge=/DAY-90DAYS&router.field=your_date_dt&router.name=time&router.interval=%2B7DAY&router.maxFutureMs=86400000&create-collection.collection.configName=_indexer_default&create-collection.numShards=1"
参数 说明
router.start NOW-30DAYS/DAY 第一个collection创建的时间点,样例中给出的NOW-30DAYS/DAY代表以30天前开始新建索引
router.interval +7DAY 间隔多久创建新的索引表,样例中给出的是每隔7天新建一个索引表
router.autoDeleteAge /DAY-90DAYS 自动淘汰多久前的索引表,样例中给出的是淘汰90天前的索引表
router.field your_date_dt 分表的时间字段,默认业务中需要携带这个字段,并指定时间值,例如:2020-02-26T00:00:00Z
router.maxFutureMs 8640000000 代表最大容忍写入的时间字段your_date_dt与当前时间的差值,防止写入过大的时间字段或者过小的时间值,样例中给出的是100天
collection.collection.configName _indexer_default 代表创建的索引表依赖的配置集
create-collection.numShards 1 创建的索引表shard个数,默认为1

上面的业务含义,以30天前(今天是3月5日)开始创建索引,每隔7天新建一个索引,写入的数据必须携带时间字段your_date_dt,并且它的值与当前时间在100天以内,周期性的删除90天过期的索引。

效果如下
image.png

注意事项
1.业务必须带有时间字段,可以为Date类型,可以为Long类型。
2.查询时,默认是查询全部索引表。此时,可以单独指定查询某个索引表。需要通过API或者URL获取到所有collection列表,提取其中的时间字段来判断真实访问的collection。

参考文档

https://lucene.apache.org/solr/guide/7_3/collections-api.html#createalias
https://lucene.apache.org/solr/guide/7_3/collections-api.html#list

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
7月前
|
存储 应用服务中间件 nginx
Elasticsearch-Alias别名的2个核心场景
了解Elasticsearch的Alias别名之后,可以在业务上很方便的实现复杂需求,快速解决问题,本文从3个方面介绍:官方定义、使用场景、使用方法。
|
测试技术 索引
Elasticsearch alias别名管理小结
Elasticsearch alias别名管理小结
134 0
|
XML 存储 JSON
Solr学习总结
Solr学习总结
156 0
Solr学习总结
|
存储 Java API
Elasticsearch Index Aliases详解
Elasticsearch Index Aliases详解
Elasticsearch Index Aliases详解
|
API 网络架构 索引
|
API 索引
【Elastic Engineering】Elasticsearch:可组合的 Index templates - 7.8 版本之后
Elasticsearch:可组合的 Index templates - 7.8 版本之后
449 0
【Elastic Engineering】Elasticsearch:可组合的 Index templates - 7.8 版本之后
|
存储 索引
|
自然语言处理
Solr BooleanQuery AND phraseQuery用法比较
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。 本文Solr BooleanQuery 与PhraseQuery 用法比较。主要内容理解布尔查询、短语查询在分词后,AND OR 关系,帮助理解查询语义,和对结果的影响。顺便温习3种实现形式。
228 0
|
XML 缓存 自然语言处理
Solr 的作用,为什么要用solr服务,
Solr 的作用,为什么要用solr服务,
293 0
|
弹性计算 API 索引