云原生多模数据库 Lindorm宽表支持搜索索引。在配置映射关联并创建搜索索引后,当您在宽表中写入数据,数据将自动同步至搜索引擎。您可以调用Elasticsearch API实现查询。本文介绍如何使用Lindorm-cli实现搜索索引的管理,以及结构化数据的实时检索查询功能。
前提条件
已开通宽表引擎。
已开通搜索索引。
已安装Java环境且JDK为1.8及以上版本。
已将客户端IP添加至Lindorm白名单中。
已通过HBase API创建宽表。本文中宽表表名为
testTable
,列族名为f1
。
步骤一:映射宽表列的类型
使用Lindorm-cli映射宽表列的数据类型,确保写入宽表的数据能按照正确的格式进行解析,并同步至搜索索引。本文示例将宽表Rowkey和f1:name列的类型映射为HSTRING类型。
ALTER TABLE testTable MAP DYNAMIC COLUMN `ROW` HSTRING, f1:name HSTRING;
更多数据类型的映射说明,请参见数据类型映射关系。
说明如果您要求存储在宽表中数据的Rowkey(示例中的
ROW
字段)和存储在搜索引擎中数据的主键ID一致,需要参考示例中将Rowkey类型映射为HSTRING后再建索引。若您未指定宽表Rowkey的类型为HSTRING,宽表Rowkey将会以HEX编码格式映射为搜索索引表主键,具体请参考rowkeyFormatterType的参数说明。
步骤二:创建搜索索引
在Lindorm-cli中创建搜索索引。本文示例的索引名称为idx
。
CREATE INDEX idx USING SEARCH ON testTable (f1:name);
通过Lindorm-cli创建搜索索引,默认不会在搜索索引中存储原始数据。如果您希望访问搜索索引的时候,能够直接获取到索引列的原始数据,可以在创建索引时指定SOURCE_SETTINGS属性。
CREATE INDEX idx USING SEARCH ON testTable(f1:name) WITH (SOURCE_SETTINGS='
{
"enabled": true
}
');
创建的搜索索引变为
ACTIVE
状态后,实时写入宽表中的数据将自动同步到索引表中。索引状态的查看方法,请参见SHOW INDEX。对于宽表中的历史数据,需要使用ALTER INDEX
语句重新构建。例如:ALTER INDEX idx ON testTable REBUILD;
,其中idx
为宽表搜索索引的索引名。详细的语法说明,请参见ALTER INDEX。退出Lindorm-cli连接,请执行
exit
、quit
或ctrl+d
。更多Lindorm-cli相关命令请参见Lindorm-cli常用命令。
步骤三:向宽表写入数据
通过Lindorm Shell访问Lindorm宽表引擎。
在Lindorm Shell中,通过HBase API在表
testTable
中插入一条数据。put 'testTable', 'row1', 'f1:name', 'foo'
步骤四:使用搜索索引查询
查询索引数据。
通过搜索引擎可视化用户界面,使用Elasticsearch API查询索引数据,获取搜索索引表的主键ID。
说明搜索引擎索引表的名称由此规则拼接而成:
<命名空间名称>.<表名称>.<索引名称>
。搜索索引表的字段名称由以下规则拼接而成:
对应宽表的列族为
f
时,索引表字段名称为列名。例如,f:name
对应name
。对应宽表列的列族不为
f
时,索引表字段名为<列族名>_<列名>
。例如f1:name
对应f1_name
。
GET /default.testTable.idx/_search { "size": 10, "query": { "match": { "f1_name": "foo" } } }
返回结果:
{ "took": 8, "timed_out": false, "_shards": { "total": 4, "successful": 4, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 0.2876821, "hits": [ { "_index": "default.testTable.idx", "_id": "row1", "_score": 0.2876821, "_source": { "_searchindex_id": "row1", "update_version_l": 1745389294641, "f1_name": "foo" } } ] } }
从返回结果中获取搜索索引表的主键ID(_id)。
使用Lindorm Shell执行以下命令查询宽表数据。
get 'testTable','row1'
返回结果:
COLUMN CELL f1:name timestamp=1745389294641, value=foo 1 row(s)