多元索引

创建数据表后,您可以通过Tablestore CLI创建多元索引、查看多元索引列表、查看多元索引信息、使用多元索引查询数据以及删除多元索引。

创建多元索引

创建一个多元索引。

命令格式

create_search_index -n search_index_name

配置项说明请参见下表。

配置项

是否必填

示例值

说明

-i,--input

/tmp/indexschema.json

通过JSON格式的文件配置多元索引Schema。

-n,--name

search_index

多元索引名称。

-t,--table

mytable

数据表名称。

--ttl

-1

数据生命周期(TTL),即数据的保存时间。当数据的保存时间超过设置的数据生命周期时,系统会自动清理超过数据生命周期的数据。默认值为-1。

数据生命周期至少为86400秒(一天)或-1(数据永不过期)。

重要

使用多元索引生命周期管理功能,必须禁用数据表的UpdateRow更新写入功能。多元索引的TTL和数据表的TTL是独立的,多元索引的TTL值必须小于或等于数据表的TTL值。更多信息,请参见生命周期管理

示例

创建search_index多元索引。

create_search_index -n search_index

根据系统提示输入索引Schema,示例如下:

 {

    "IndexSetting": {
        "RoutingFields": null
    },
    "FieldSchemas": [
        {
            "FieldName": "gid",
            "FieldType": "LONG",
            "Index": true,
            "EnableSortAndAgg": true,
            "Store": true,
            "IsArray": false,
            "IsVirtualField": false
        },
        {
            "FieldName": "uid",
            "FieldType": "LONG",
            "Index": true,
            "EnableSortAndAgg": true,
            "Store": true,
            "IsArray": false,
            "IsVirtualField": false
        },
        {
            "FieldName": "col2",
            "FieldType": "LONG",
            "Index": true,
            "EnableSortAndAgg": true,
            "Store": true,
            "IsArray": false,
            "IsVirtualField": false
        },
        {
            "FieldName": "col3",
            "FieldType": "TEXT",
            "Index": true,
            "Analyzer": "single_word",
            "AnalyzerParameter": {
                "CaseSensitive": true,
                "DelimitWord": null
            },
            "EnableSortAndAgg": false,
            "Store": true,
            "IsArray": false,
            "IsVirtualField": false
        },
        {
            "FieldName": "col1",
            "FieldType": "KEYWORD",
            "Index": true,
            "EnableSortAndAgg": true,
            "Store": true,
            "IsArray": false,
            "IsVirtualField": false
        },
        {
            "FieldName": "col3V",
            "FieldType": "LONG",
            "Index": true,
            "EnableSortAndAgg": true,
            "Store": true,
            "IsArray": false,
            "IsVirtualField": true,
            "SourceFieldNames": [
                "col3"
            ]
        }
    ]
}

多元索引Schema配置项说明请参见下表。

配置项

是否必填

说明

IndexSetting

索引设置,包含RoutingFields设置。

RoutingFields(可选):自定义路由字段。可以选择部分主键列作为路由字段,在进行索引数据写入时,会根据路由字段的值计算索引数据的分布位置,路由字段的值相同的记录会被索引到相同的数据分区中。

FieldSchemas

FieldSchema的列表,每个FieldSchema包含如下内容:

  • FieldName(必选):创建多元索引的字段名,即列名,类型为String。

    多元索引中的字段可以是主键列或者属性列。

  • FieldType(必选):字段类型。更多信息,请参见数据类型映射

  • IsArray(可选):是否为数组,类型为Boolean。

    如果设置为true,则表示该列是一个数组,在写入时,必须按照JSON数组格式写入,例如["a","b","c"]

    由于Nested类型是一个数组,当FieldTypeNested类型时,无需设置此参数。

  • Index(可选):是否开启索引,类型为Boolean。

    默认为true,表示对该列构建倒排索引或者空间索引;如果设置为false,则不会对该列构建索引。

  • Analyzer(可选):分词器类型。当字段类型为Text时,可以设置此参数;如果不设置,则默认分词器类型为单字分词。关于分词的更多信息,请参见分词

  • AnalyzerParameter:使用单字分词时,配置分词参数,包含CaseSensitiveDelimitWord设置。

    • CaseSensitive:是否大小写敏感。默认是false,此时所有英文字母会转换为小写。如果不需要系统自动将英文字母转换为小写字母,需要保持大小写敏感,请设置CaseSensitivetrue。

    • DelimitWord:对于英文和数字连接在一起的单词是否分割英文和数字。默认是false,此时英文和数字连接在一起不会拆分。如果需要将数字和英文拆分开,请设置DelimitWord参数为true。

  • EnableSortAndAgg(可选):是否开启排序与统计聚合功能,类型为Boolean。

    只有EnableSortAndAgg设置为true的字段才能进行排序。关于排序的更多信息,请参见排序和翻页

    重要

    Nested类型的字段不支持开启排序与统计聚合功能,但是Nested类型内部的子列支持开启排序与统计聚合功能。

  • Store(可选):是否在多元索引中附加存储该字段的值,类型为Boolean。

    开启后,可以直接从多元索引中读取该字段的值,而不必反查数据表,可用于查询性能优化。

  • IsVirtualField(可选):该列是否为虚拟列,类型为Boolean类型,默认值为false。只有使用虚拟列时,才需要设置此参数。关于虚拟列的更多信息,请参见虚拟列

  • SourceFieldNames(可选):数据表中的字段名称,类型为String。当设置IsVirtualFieldtrue时,必须设置此参数。

IndexSort

索引预排序设置,包含Sorters设置。如果不设置,则默认按照主键排序。

重要

含有Nested类型的索引不支持IndexSort,没有预排序。

Sorters(可选):索引的预排序方式,包含NameSorter设置。支持按照主键排序和字段值排序。更多信息,请参见排序和翻页

  • Name:排序方式,取值范围如下:

    • PrimaryKeySort表示按照主键排序。

    • FieldSort表示按照字段值排序。

      只有建立索引且开启排序与统计聚合功能的字段才能进行预排序。

  • Sorter:包含如下设置:

    当排序方式为主键排序时只需要Order。当排序方式为字段名排序时需要设置FieldNameOrder。

    • FieldName:排序的字段名。

    • Order:排序的顺序,可按升序(ASC)或者降序(DESC)排序,默认为ASC。

查看多元索引列表

查看当前数据表下多元索引的列表。

命令格式

list_search_index

配置项说明请参见下表。

配置项

是否必填

示例值

说明

-a,--all

不涉及

显示所有表的多元索引列表。

-d,--detail

不涉及

显示多元索引的详细信息。

-t,--table

mytable

数据表名称。

示例

查看当前表下的多元索引列表。

list_search_index

返回结果如下:

+-----------+--------------+
| TableName | IndexName    |
+-----------+--------------+
| mytable   | search_index |
+-----------+--------------+

查看多元索引信息

查看多元索引的信息。

命令格式

describe_search_index -n search_index_name

配置项说明请参见下表。

配置项

是否必填

示例值

说明

-n,--name

search_index

多元索引名称。

-o,--output

/tmp/describeinfo.json

输出查询结果到本地JSON格式文件或TXT格式文件中。

-t,--table

mytable

数据表名称。

示例

查看search_index多元索引的信息。

describe_search_index -n search_index

返回结果中的Index schema为多元索引的Schema,TimeToLive为多元索引的数据生命周期。

使用多元索引查询数据

使用多元索引查询满足指定条件的数据,并对数据进行统计聚合操作。

命令格式

search -n search_index_name --return_all_indexed

配置项说明请参见下表。

配置项

是否必填

示例值

说明

-c,--column

col1,col2

要返回的列。多个列之间用半角逗号(,)分隔。

-n,--name

search_index

多元索引名称。

-f,--print_format

table

输出结果的打印格式,默认值为table。

--return_all

不涉及

返回所有列。

--return_all_indexed

不涉及

返回所有多元索引中建立索引的列。

-t,--table

mytable

数据表名称。

示例

使用search_index多元索引查询表中数据,并返回所有建立索引的列。

search -n search_index --return_all_indexed

根据系统提示输入查询条件,示例如下:

{
    "Offset": -1,
    "Limit": 10,
    "Collapse": null,
    "Sort": null,
    "GetTotalCount": true,
    "Token": null,
    "Query": {
        "Name": "BoolQuery",
        "Query": {
            "MinimumShouldMatch": null,
            "MustQueries": null,
            "MustNotQueries": null,
            "FilterQueries": null,
            "ShouldQueries": [{
                "Name": "RangeQuery",
                "Query": {
                    "FieldName": "gid",
                    "From": null,
                    "To": 10,
                    "IncludeLower": false,
                    "IncludeUpper": false
                }
            }, {
                "Name": "TermQuery",
                "Query": {
                    "FieldName": "gid",
                    "Term": "77"
                }
            }]
        }
    },
    "Aggregations": [{
        "Name": "avg",
        "Aggregation": {
            "AggName": "agg1",
            "Field": "gid",
            "MissingValue": null
        }
    }]
}

配置项说明请参见下表。

参数

是否必填

说明

Offset

本次查询的开始位置。

Limit

本次查询需要返回的最大数量。

如果要随机获取几行数据,请设置limit为正整数。

如果只为了获取行数,无需具体数据,可以设置limit=0,即不返回任意一行数据。

Collapse

折叠参数配置,可以按照某一列对结果集做折叠,使对应类型的数据在结果展示中只出现一次,保证结果展示中类型的多样性。更多信息,请参见折叠(去重)

FieldName:列名,按该列对结果集做折叠,只支持应用于整型、浮点数和Keyword类型的列,不支持数组类型的列。

Sort

返回结果的排序方式。更多信息,请参见查询时指定排序方式

如果查询数据未设置排序方式,则查询结果会按照预排序方式返回;如果创建多元索引时未设置预排序,则查询结果会按照主键排序返回。

GetTotalCount

是否返回匹配的总行数,默认为false,表示不返回。

返回匹配的总行数会影响查询性能。如果要返回匹配的总行数,请设置GetTotalCounttrue。

Token

当符合查询条件的数据未读取完时,服务端会返回Token值,此时可以使用Token继续读取后面的数据。首次读取数据时,Token值需要设置为null。

Query

查询类型。多元索引支持全匹配查询(MatchAllQuery)、匹配查询(MatchQuery)、短语匹配查询(MatchPhraseQuery)、精确查询(TermQuery)、多词精确查询(TermsQuery)、前缀查询(PrefixQuery)等多种查询方式,请根据实际设置。更多信息,请参见使用SDK查询数据

Aggregations

统计聚合功能配置,可以实现求最小值、求最大值、求和、求平均值、统计行数、去重统计行数等功能。更多信息,请参见统计聚合

  • Name:统计聚合功能类型,例如min、max、sum、avg、count等。

  • Aggregation:统计聚合参数配置。包含如下配置:

    • AggName:自定义的统计聚合名称,用于区分不同的统计聚合。

    • Field:用于统计聚合的字段。

    • MissingValue:当某行数据中的字段为空时,字段值的默认值。如果未设置MissingValue值,则在统计聚合时会忽略该行;如果设置了MissingValue值,则使用MissingValue值作为字段值的默认值参与统计聚合。

删除多元索引

删除不需要的多元索引。

命令格式

drop_search_index -n search_index_name -y

配置项说明请参见下表。

配置项

是否必填

示例值

说明

-n,--name

search_index

多元索引名称。

-t,--table

mytable

数据表名称。

-y,--yes

不涉及

显示确认信息。命令中必须带有此配置项。

示例

删除search_index多元索引。

drop_search_index -n search_index -y