HBase检索 | 云HBase全文索引服务,增强HBase的检索能力

Posted HBase技术社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase检索 | 云HBase全文索引服务,增强HBase的检索能力相关的知识,希望对你有一定的参考价值。

云HBase发布了“全文索引服务”功能,自2019年01月25日后创建的云HBase实例,可以在控制台免费开启此“全文索引服务”功能。使用此功能可以让用户在HBase之上构建功能更丰富的搜索业务,不再局限于KV简单查询,不再苦恼于设计各种rowkey,不再后怕日益变化的HBase复杂查询业务。“全文索引服务”为云HBase增强查询能力而设计,自动同步数据,用户只需重点关注如何使用强大的检索功能来丰富自己的业务架构。


为什么要增强HBase的检索能力

总结下来,我们列出来了几个使用HBase进行查询业务设计时碰到的痛点:

  • 无法满足任意条件组合查询

  • 不能高效支持模糊查询

  • 不支持关键字分词查询

  • 不能高效支持多维度的排序/分页

  • 不能对查询的结果集进行分类统计

云HBase全文索引服务,增强HBase检索能力

全文索引服务是为了增强HBase查询能力而设计,使得HBase除了强大的KV能力外,更加丰富了它的在复杂条件查询下的能力,具体抽象出来以下几个场景:

  • 复杂条件任意查询

  • 多维度排序

  • 复杂条件分页

  • 分词关键字查询

  • 匹配结果集分类统计

  • 常用min/max/avg/sum等stats统计

云HBase全文索引服务使用简单,只需要DDL阶段建立索引,后续自动进行数据索引同步,架构如下

和自建的区别
功能 云HBase启用全文索引 自建HBase+indexer+solr HBase
简单rowkey查询 支持 支持 支持
复杂查询 支持 支持 不支持
索引同步 支持 支持 不支持
乱序同步 支持 不支持 ———
强一致 支持 不支持 ———
xml动态列 支持 不支持 ———

另外,自建hbase+indexer+solr存在几个bug,导致很多用户反馈的自建这种架构丢数据现象;云HBase对此进行了许多bugfix和改进。


如何使用云HBase全文索引服务

云HBase全文索引服务的使用,启用此服务后,只需要简单DDL建立索引即可,插入同步无限管理,用户只需关注后续查询要使用HBase api/Solr api进行构建丰富的业务查询即可。下面我们来简单体验下整个流程。


开启服务

“全文索引服务”属于云HBase的免费扩展服务,自2019年1月25日后创建的云HBase实例控制台,实例左侧点击“全文索引服务”详情页进行服务开启即可,如下:

HBase检索 | 云HBase全文索引服务,增强HBase的检索能力

HBase检索 | 云HBase全文索引服务,增强HBase的检索能力


建立索引

1.下载索引管理客户端工具

wget http://public-hbase.oss-cn-hangzhou.aliyuncs.com/installpackage/solr-7.3.1-ali-1.0.tgz
tar zxvf solr-7.3.1-ali-1.0.tgz

2.修改solr-7.3.1-ali-1.0/bin/solr.in.sh文件的ZK_HOST如下:

ZK_HOST=zk1:2181,zk2:2181,zk3:2181/solr

3.创建HBase表,开启replication同步机制

create  'solrdemo',{NAME=>'info',  REPLICATION_SCOPE=> '1'}

4.创建Solr表democollection

第一步,修改并上传solrconfig.xml/schema,如果不需要修改,可使用demo默认config进行上传,如下:

solr-7.3.1-ali-1.0/bin/solr zk upconfig -d _democonfig  -n democollection_config -z zk1:2181/solr

第二步,使用刚上传的配置创建democollection,如下:

curl "http://hostname:8983/solr/admin/collections?action=CREATE&name=democollection&numShards=1&replicationFactor=1&collection.configName=democollection_config"

其中hostname可以使用master3-1中缀的zk hostname进行替换。

5.配置HBase solrdemo表到Solr democollection表的字段映射索引关系
第一步,编辑index_conf.xml配置映射关系,例如:

<?xml version="1.0"?>
<indexer table="solrdemo">
        <field name="name_s" value="info:q2" type="string"/>
        <field name="age_i" value="info:q3" type="int"/>
        <param name="update_version_l" value="true"/>
</indexer>

配置描述了hbase表solrdemo的 info:q2 info:3 分别映射成solr democollection里面的name_s和age_i 字段。并指定以string解析info:q2 列保存到name_s字段中,以int解析info:q3 保存到age_i中。其中solr collection的name_s、age_i是何种类型,是根据solr collection的配置觉得,默认采用动态类型推断,即根据collection字段的名字后缀判断类型进行存储。常见类型_i、_s、_l、_b、_f、_d分别对应int/string/long/boolean/float/double。当然,用户也可以直接指定字段类型。最后一个update_version_l为固定写法,保存document级别的最新更新时间。

第二步,使用工具将 index_conf.xml 设置关联hbase表solrdemo和solr表democollection的索引映射关系,命令如下:

solr-7.3.1-ali-1.0/bin/solr-indexer add  
     -n demoindex  
     -f indexer_conf.xml  
     -c democollection

到此,我们就完成了索引的关系映射,随后正常插入hbase即可,就不需要关心索引同步,它会自动同步hbase solrdemo表的对应字段到solr democollection表的对应字段中。如上例映射如下

HBase检索 | 云HBase全文索引服务,增强HBase的检索能力

其中,HBase表的rowkey映射到Solr表里面的id字段。


查询检索

查询较为简单,依然完全兼容开源HBase API和Solr API的操作,根据业务使用solr进行条件查询,结果集中,id字段就是所有符合条件的hbase rowkey,我们只有这个id转换为rowkey,并使用HBase API读取属于这个行的原数据即可。流程图大致如下

HBase检索 | 云HBase全文索引服务,增强HBase的检索能力


展望

  • 索引管理更简单易用

  • SQL入口接入全文索引服务

  • 全文引擎新一代更高效副本机制

  • 除了异步索引,同步索引也会后续支持

产品入口:

https://cn.aliyun.com/product/hbase

使用全文索引服务帮助文档:

https://help.aliyun.com/document_detail/88404.html


HBase检索 | 云HBase全文索引服务,增强HBase的检索能力

技术社群

【HBase生态+Spark社区大群】
群福利:群内每周进行群直播技术分享及问答
加入方式1:

https://dwz.cn/Fvqv066s?spm=a2c4e.11153940.blogcont688191.19.1fcd1351nOOPvI

加入方式2:钉钉扫码加入

以上是关于HBase检索 | 云HBase全文索引服务,增强HBase的检索能力的主要内容,如果未能解决你的问题,请参考以下文章

HBase服务|HBase全文服务Solr系列资料

基于大数据HBase的电子病历智能全文检索系统研究

HBase实操 | 如何使用HBase存储文本文件

如何使用MaxCompute Spark读写阿里云Hbase

Hbase数据库检索性能优化策略

星环hyperbase和开源hbase的那些事