多元索引

如果实际业务中要用到非主键列查询、多条件组合查询等多种查询功能,您可以为数据表创建多元索引,然后使用多元索引查询数据。本文介绍如何通过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 -d

查看多元索引信息

命令格式

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

数据表名称。

示例

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

    search -n search_index --return_all_indexed
  2. 根据系统提示输入查询条件。

    以下示例用于查询当前表中uid精确匹配10001的行数据,同时对行数据的pid列进行求平均值操作。

    {
        "Offset": -1,
        "Limit": 10,
        "Collapse": null,
        "Sort": null,
        "GetTotalCount": true,
        "Token": null,
        "Query": {
            "Name": "TermQuery",
            "Query": {
                "FieldName": "uid",
                "Term": 10001
            }
        },
        "Aggregations": [{
            "Name": "avg",
            "Aggregation": {
                "AggName": "agg1",
                "Field": "pid"
            }
        }]
    }

    配置项说明

    参数

    是否必填

    说明

    Offset

    本次查询的开始位置。

    Limit

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

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

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

    Collapse

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

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

    Sort

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

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

    GetTotalCount

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

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

    Token

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

    Query

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

    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
    OSZAR »