如何通过 hbase shell 创建全文索引

  其他常见问题
内容纲要

概要描述


本案例介绍如何通过 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';

file

查看表的元数据信息。

> describe formatted hbase_fulltext_test;

file

2. 在hbase shell中导出配置文件

2.1. 在宿主机上创建一个该表的json配置信息保存文件,如 /root/mll/hbase_fulltext_test.json
file

2.2. 进入hbase shell导出配置文件

> describeInJson 'hbase_fulltext_test', 'true','/root/mll/hbase_fulltext_test.json'

file

查看导出的json文件
file

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’ 来修改元数据信息,然后等待修改成功。

file

6. 验证全文索引是否创建成功

6.1. 通过在 inceptor 中查看元数据信息来确认

> describe formatted hbase_fulltext_test;

file

6.2. 通过在 search 的 9100页面查看 index来确认

可以在search页面看到全文索引表 elasticsearch_hbase_fulltext_test。

file

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。