通过Lindorm-cli管理搜索索引

云原生多模数据库 Lindorm宽表支持搜索索引。在配置映射关联并创建搜索索引后,当您在宽表中写入数据,数据将自动同步至搜索引擎。您可以调用Elasticsearch API实现查询。本文介绍如何使用Lindorm-cli实现搜索索引的管理,以及结构化数据的实时检索查询功能。

前提条件

步骤一:映射宽表列的类型

  1. 进入Lindorm-cli访问环境

  2. 使用Lindorm-cli映射宽表列的数据类型,确保写入宽表的数据能按照正确的格式进行解析,并同步至搜索索引。本文示例将宽表Rowkeyf1: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连接,请执行exitquitctrl+d。更多Lindorm-cli相关命令请参见Lindorm-cli常用命令

步骤三:向宽表写入数据

  1. 通过Lindorm Shell访问Lindorm宽表引擎

  2. Lindorm Shell中,通过HBase API在表testTable插入一条数据

    put 'testTable', 'row1', 'f1:name', 'foo'

步骤四:使用搜索索引查询

  1. 查询索引数据。

    通过搜索引擎可视化用户界面,使用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)。

  2. 使用Lindorm Shell执行以下命令查询宽表数据。

    get 'testTable','row1'

    返回结果:

    COLUMN                                                     CELL                                                                                                                                                                      
     f1:name                                                   timestamp=1745389294641, value=foo                                                                                                                                        
    1 row(s)