更新时间:2026-08-06 GMT+08:00
分享

CSS索引使用指南

操作场景

在CSS数据同步场景中,若需将GeminiDB Cassandra实例中的用户表数据同步至CSS集群,关键流程之一是通过同步功能连接GeminiDB Cassandra实例,并对目标用户表执行创建CSS索引的CQL操作。所以本章将详细介绍CSS索引的使用方法及注意事项。

使用须知

  • 支持的数据同步操作:创建CSS索引、删除CSS索引、修改索引mappings配置,以及INSERT、UPDATE、DELETE类型CQL的数据同步。
  • 一个GeminiDB Cassandra实例只能选择一个目标CSS集群执行数据同步。
  • 一个GeminiDB Cassandra用户表只能创建一个CSS索引,且同一个用户表中不得同时存在CSS索引与Lucene索引。
  • 不同用户表创建的CSS索引建议避免重名,除非这些表中的用户数据需要在CSS端同步到同一个索引中。
  • CSS索引一旦创建,其settings和cassandra_mapping_templates配置无法通过ALTER命令修改。
  • 通过TTL机制或Truncate命令删除的数据不支持CSS数据同步。
  • CSS索引不能包含存量文档。
  • GeminiDB Cassandra用户表仅部分支持CSS数据同步,详细信息请参见用户表数据类型限制
  • 用户表每行记录中,主键个数与主键编码字符数之和不得超过512。主键类型与主键编码字符数的关系请参见主键类型与主键编码字符数的关系
  • CSS索引mappings限制。
    • 在strict模式下,properties必须包含用户表中的所有主键列。
    • 当主键类型为text或varchar时,properties中对应的数据类型必须指定为keyword。
    • properties中的列必须存在于GeminiDB Cassandra用户表中。
    • properties中的列名不得与保留字段 _TIMESTAMP_INTERNAL 冲突。
    • properties中的列数据类型须与GeminiDB Cassandra表中同名列兼容。详细信息请参见Cassandra数据类型兼容的CSS数据类型

创建CSS索引

基础表结构示例

CREATE TABLE test_ks.test_cf(
     country text,
     city text,
     longitude int, 
     latitude int, 
     primary key(country,city) 
); 

创建CSS索引语法

使用特定的settings和mappings,为用户表创建名为test_index的CSS索引,数据会同步到目标CSS集群的test_index索引下。

CREATE CUSTOM INDEX test_index ON test_ks.test_cf () USING 'OpenSearchIndex'
WITH OPTIONS = {
     'settings': '{
       "number_of_shards": 1,
       "number_of_replicas": 1
     }',
     'mappings': '{
         "properties": {
             "country": {"type": "keyword"},
             "city": {"type": "keyword"},
             "longitude": {"type": "long"},
             "latitude": {"type": "long"}
        }
    }'
}; 

数据同步示例

执行CQL插入:

INSERT INTO test_ks.test_cf(country, city, longitude, latitude) VALUES('XXX', 'XXX', 39, 116); 

CSS中查询结果:

{ 
    "country": "XXX",
    "city": "XXX",
    "longitude": 39,
    "latitude": 116
} 

OPTIONS配置参数说明

  • settings

    与CSS ElasticSearch中的创建索引配置settings含义一致,在CSS创建索引时直接引用。

  • mappings

    与CSS ElasticSearch中的创建索引配置mappings含义一致,在CSS创建索引时直接引用。

  • cassandra_mapping_templates

    支持使用ElasticSearch复杂数据类型(如object、point等),提供GeminiDB Cassandra普通列值填充复杂数据类型的模板。

    • point类型示例

      在CSS ElasticSearch中,point数据类型表示经纬度地理信息数据。如下示例使用point类型,并用longitude、latitude列的值对经度和纬度数据进行填充。

      CREATE CUSTOM INDEX test_index ON test_ks.test_cf () USING 'OpenSearchIndex'
      WITH OPTIONS = {
           'cassandra_mapping_templates': '{
               "location": {
                   "type": "point",
                   "coordinates": ["${longitude}", "${latitude}"]
               }
           }'
      }; 

      执行CQL插入:

      INSERT INTO test_ks.test_cf(country, city, longitude, latitude) VALUES('XXX', 'XXX', 39, 116); 

      插入数据后CSS查询结果:

      {     
          "country": "XXX",
          "city": "XXX", 
          "longitude": 39, 
          "latitude": 116, 
          "location": {
              "type": "point",
              "coordinates": [39, 116]
          }
      }
    • 默认值处理

      当普通列值为Null时,可使用默认值避免Null填充:

      CREATE CUSTOM INDEX test_index ON test_ks.test_cf () USING 'OpenSearchIndex'
      WITH OPTIONS = {
          'cassandra_mapping_templates': '{
              "location": {
                  "type": "point",
                  "coordinates": ["${longitude:90}", "${latitude:180}"]
              }
          }'
      }; 

      未指定经纬度值的插入:

      INSERT INTO test_ks.test_cf(country, city) VALUES('XXX', 'unknown'); 

      CSS查询结果:

      {
          "country": "XXX",
          "city": "unknown",
          "location": {
              "type": "point",
              "coordinates": [90, 180]
          }
      }

更改CSS索引的mappings配置

更改索引test_index的mappings配置,将动态映射模式设置为strict。

ALTER INDEX test_index WITH options =
{
    'mappings': '{
        "dynamic": "strict",
        "properties": {
            "country": {"type": "keyword"},
            "city": {"type": "keyword"},
            "longitude": {"type": "long"},
            "latitude": {"type": "long"}
        }
    }'
};

删除CSS索引

与普通索引的删除CQL相同。

DROP INDEX test_index;

用户表数据类型限制

GeminiDB Cassandra用户表仅部分支持CSS数据同步。

表1 用户表数据类型限制

数据类型

是否支持CSS数据同步

ascii

支持

bigint

支持

blob

不支持

boolean

支持

counter

不支持

date

支持

decimal

不支持

double

支持

duration

不支持

float

支持

inet

支持

int

支持

smallint

支持

text

支持

time

不支持

timestamp

支持

timeuuid

支持

tinyint

支持

uuid

支持

varchar

支持

varint

不支持

map

不支持

set

不支持

list

不支持

tuple

不支持

udt

不支持

主键类型与主键编码字符数的关系

用户表每行记录中,主键个数与主键编码字符数之和不得超过512。

主键类型与主键编码字符数对应关系

表2 主键类型与主键编码字符数对应关系

主键类型

主键编码字符数

ascii

列值长度 * 2

bigint

8

boolean

2

date

8

double

16

float

8

inet

  • ipv4:8
  • ipv6:32

int

8

smallint

4

text

utf-8编码字节数 * 2

字符类型与utf-8编码字节数的关系请参见表3

例如"css index"的utf-8编码字节数为9,主键编码字符数为18;"css数据同步"的utf-8编码字节数为 15,主键编码字符数为30。

timestamp

16

timeuuid

32

tinyint

2

uuid

32

varchar

utf-8编码字节数 * 2

字符类型与utf-8编码字节数的关系请参见表3

例如"css index"的utf-8编码字节数为9,主键编码字符数为18;"css数据同步"的utf-8编码字节数为 15,主键编码字符数为30。

字符类型与utf-8编码字节数的关系

表3 字符类型与utf-8编码字节数的关系

字符类型

对应utf-8编码字节数

ascii字符

1

拉丁字符、西里尔字符等

2

中文字符

3

表情字符、生僻字等

4

示例说明

  • 该表主键数量为2,主键编码字符长度分别为8和16,合计26,满足数据同步条件。
    CREATE TABLE test_cf(pk int, ck timestamp, v1 text, v2 text, primary key(pk, ck));
  • 该表主键采用变长编码类型,需逐行评估其具体数据特征。
    CREATE TABLE test_cf(pk text, ck1 text, ck2 text, v text, primary key(pk, ck1, ck2));
  • 该行主键数为3,编码字符长度分别为36、18和30,总和为87,符合数据同步条件。
    INSERT INTO test_cf(pk, ck1, ck2) VALUES('GeminiDB Cassandra', 'css index', 'css数据同步')

Cassandra数据类型兼容的CSS数据类型

properties中的列数据类型须与GeminiDB Cassandra表中同名列兼容。详细信息请参见表4
表4 Cassandra数据类型兼容的CSS数据类型

Cassandra数据类型

兼容的CSS数据类型

ascii

  • text
  • keyword
  • match_only_text
  • wildcard
  • token_count
  • constant_keyword
  • version

bigint

long

boolean

boolean

date

  • text
  • keyword
  • match_only_text
  • wildcard
  • token_count
  • constant_keyword
  • version

double

double

float

  • float
  • double

inet

  • ip
  • text
  • keyword
  • match_only_text
  • wildcard
  • token_count
  • constant_keyword
  • version

int

  • integer
  • long

smallint

  • short
  • integer
  • long

text

  • text
  • keyword
  • match_only_text
  • wildcard
  • token_count
  • constant_keyword
  • version

timestamp

  • date
  • date_nanos

timeuuid

  • text
  • keyword
  • match_only_text
  • wildcard
  • token_count
  • constant_keyword
  • version

tinyint

  • byte
  • short
  • integer
  • long

uuid

  • text
  • keyword
  • match_only_text
  • wildcard
  • token_count
  • constant_keyword
  • version

varchar

  • text
  • keyword
  • match_only_text
  • wildcard
  • token_count
  • constant_keyword
  • version

相关文档