内容纲要
概要描述
本案例介绍如何通过 hbase shell 指令创建全文索引。
详细说明
1. 在inceptor中创建hbase表
在 inceptor 中创建表名为 hbase_fulltext_test 的 hbase 表,该表有 key1、c1、c2、c3 四列,映射到 hyperbase 中的表为 hbase_fulltext_test,列族为 f,列限定符分别对应 rowkey、q1、q2、q3,该映射关系可以通过命令 describe formatted 查看。
CREATE TABLE hbase_fulltext_test(key1 string,c1 string,c2 string,c3 string)
STORED by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler';
查看表的元数据信息。
> describe formatted hbase_fulltext_test;
2. 在hbase shell中导出配置文件
2.1. 在宿主机上创建一个该表的json配置信息保存文件,如 /root/mll/hbase_fulltext_test.json
2.2. 进入hbase shell导出配置文件
> describeInJson 'hbase_fulltext_test', 'true','/root/mll/hbase_fulltext_test.json'
查看导出的json文件
3. json配置文件修改全文索引部分说明
"fulltextindex" : {
// 必填项,hbase表名
"tableName":"tableName",
// 必填项,boolean值,表示是否允许对建索引列进行update操作,如果设置为false,则hbase中put/delete需要完全覆盖或完全不涉及需要索引的column;
"allowUpdate":"true/false",
// 可选项,表示索引数据的ttl时间,单位毫秒,0或不填表示不进行数据ttl,默认为0;
"ttl" : 3600000,
// 可选项,表示是否在es中存储_source信息,默认为true;设置为false,可以加速rebuild_fulltext_index,减少索引大小;
"source" : true/false,
// 可选项,表示是否在es中存储_all信息,默认为false;
"all" : "true/false",
// 必填项,field数组,每个field描述一个hbase列的索引信息;
"fields":[
{
// 必填项,列族名;
"family" : "string",
// 必填项,列限定符,对该列建立全文索引;
"qualifier" : "string",
// 可选项,如果type != string,该属性表示在hbase中存储的byte数组是否是由特定数据类型转换成的,以type == long,值为123举例,当该值为true是,hbase中存储的byte[]是Bytes.toBytes("123"),当该值为false时,hbase中存储的byte[]是Bytes.toBytes(123),默认为false;
"encode_as_string" : "true",
"attributes" : {
// 可选项,数据类型,默认为string,需要特殊注意的是date类型,es中的date类型支持string类型与long类型的数据,但在hyperbase中,date类型只支持string类型,其格式是es中的dateOptionalTime,如"2015-01-01"或"2015-01-01 12:12:12",如果用户的数据是long表示,请使用long类型;
"type" : "string/byte/short/integer/long/float/double/boolean/date",
// 可选项,分词器,默认使用es自带的analyzer,使用该配置项可以同时指定search和index的analyzer;
"analyzer" : "ik/mmseg",
// 可选项,单独指定search的analyzer;
"search_analyzer" : "ik/mmseg",
// 可选项,单独指定index的analyzer;
"index_analyzer" : "ik/mmsge",
// 可选项,是否存储,默认是true;
"store" : "true/false",
// 可选项,是否索引,默认为not_analyzed;
"index" : "analyzed/not_analyzed/no",
// 可选项,默认为false表示不启用;
"doc_values" : "true/false",
}
}],
"settings": {
// 可选项,分片数,如不指定则使用系统默认分片数;
"index.number_of_shards" : "10",
// 可选项,副本数,如不指定则使用系统默认副本数;
"index.number_of_replicas" : "2"
}
}
4. 修改hbase_fulltext_test.json配置文件
本实验针对字段 c2 创建全文索引,即映射到 hyperbase 中 hbase_fulltext_test 的 f:q2 列。
json文件修改后 “fulltextindex” 部分内容为:
"fulltextindex" : {
"tableName":"hbase_fulltext_test",
"allowUpdate":"true",
"fields":[
{ "family" : "f",
"qualifier" : "q2"
}]
},
5. 使用修改后的json文件修改表结构
在hbase shell中使用命令修改表结构。
> alterUseJson 'hbase_fulltext_test','/root/mll/hbase_fulltext_test.json'
上述命令执行之后,会在控制台交互式的打印元数据信息,需要手动输入 ‘y’ 来修改元数据信息,然后等待修改成功。
6. 验证全文索引是否创建成功
6.1. 通过在 inceptor 中查看元数据信息来确认
> describe formatted hbase_fulltext_test;
6.2. 通过在 search 的 9100页面查看 index来确认
可以在search页面看到全文索引表 elasticsearch_hbase_fulltext_test。