多元索引

更新时间:
复制为 MD 格式

通过命令行工具创建和管理多元索引,实现非主键列查询、多条件组合查询等多维度数据查询。

前提条件

  • 已完成命令行工具的安装和访问凭证配置。具体操作,请参见命令行工具

  • 已创建数据表。具体操作,请参见数据表操作

创建多元索引

create_search_index -n <indexName>

参数

必填

说明

-i,--input

通过 JSON 格式的文件配置多元索引 Schema。不指定时通过交互式输入。

-n,--name

多元索引名称。

-t,--table

数据表名称。已通过use选定数据表时可省略。

--ttl

数据生命周期(TTL),即数据的保存时间。单位为秒。默认值为 -1(永不过期)。取值最低为 86400 秒(一天)。数据保存时间超过 TTL 后,系统自动清理过期数据。

重要

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

执行命令后根据系统提示输入索引 Schema(JSON 格式),或通过-i参数指定 Schema 文件。Schema 包含以下配置项:

参数

必填

说明

IndexSetting

索引设置,包含 RoutingFields 设置。

RoutingFields(可选):自定义路由字段。可以选择部分主键列作为路由字段,索引数据读写时,路由字段值相同的数据会被分配到相同分区,从而提高查询效率。通常只需设置一个路由字段。如果设置多个路由字段,系统会将多个路由字段的值拼接成一个值。

FieldSchemas

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

  • FieldName(必选):创建多元索引的字段名,即列名,类型为 String。多元索引中的字段可以是主键列或者属性列。

  • FieldType(必选):字段数据类型

  • IsArray(可选):是否为数组,类型为 Boolean。如果设置为 true,则表示该列是一个数组,在写入时必须按照 JSON 数组格式写入,例如["a","b","c"]。由于 Nested 类型是一个数组,当 FieldType 为 Nested 类型时,无需设置此参数。

  • Index(可选):是否开启索引,类型为 Boolean。默认为 true,表示对该列构建倒排索引或者空间索引;如果设置为 false,则不会对该列构建索引。

  • Analyzer(可选):分词器类型。当字段类型为 Text 时可以设置此参数;如果不设置,则默认分词器类型为单字分词。

  • AnalyzerParameter:使用单字分词时的分词参数,包含 CaseSensitive(是否大小写敏感,默认 false)和 DelimitWord(是否分割英文和数字,默认 false)。

  • EnableSortAndAgg(可选):是否开启排序与统计聚合功能,类型为 Boolean。只有 EnableSortAndAgg 设置为 true 的字段才能进行排序

    重要

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

  • Store(可选):是否在多元索引中附加存储该字段的值,类型为 Boolean。开启后可以直接从多元索引中读取该字段的值,而不必反查数据表,可用于查询性能优化。

  • IsVirtualField(可选):该列是否为虚拟列,类型为 Boolean,默认值为 false。设置为 true 时必须同时设置 SourceFieldNames。

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

IndexSort

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

重要

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

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

  • Name:排序方式。PrimaryKeySort 表示按照主键排序,FieldSort 表示按照字段值排序(只有建立索引且开启排序与统计聚合功能的字段才能进行预排序)。

  • Sorter:包含 FieldName(排序的字段名,字段值排序时需要设置)和 Order(排序顺序,ASC 升序或 DESC 降序,默认 ASC)。

示例

创建 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": "col3",
            "FieldType": "TEXT",
            "Index": true,
            "Analyzer": "single_word",
            "AnalyzerParameter": {
                "CaseSensitive": true,
                "DelimitWord": null
            },
            "EnableSortAndAgg": false,
            "Store": true,
            "IsArray": false,
            "IsVirtualField": false
        }
    ],
    "IndexSort": {
        "Sorters": [
            {
                "Name": "PrimaryKeySort",
                "Sorter": {
                    "Order": "ASC"
                }
            }
        ]
    }
}

通过文件创建多元索引:

create_search_index -n search_index -i /tmp/indexschema.json

查看多元索引列表

list_search_index

参数

必填

说明

-a,--all

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

-d,--detail

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

-t,--table

数据表名称。已通过use选定数据表时可省略。

示例

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

list_search_index -d

查看多元索引信息

describe_search_index -n <indexName>

参数

必填

说明

-n,--name

多元索引名称。

-o,--output

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

-t,--table

数据表名称。已通过use选定数据表时可省略。

示例

查看 search_index 多元索引的信息。

describe_search_index -n search_index

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

使用多元索引查询数据

支持使用命令行工具操作的多元索引查询类型包括精确查询多词精确查询全匹配查询匹配查询短语匹配查询前缀查询范围查询通配符查询基于分词的通配符查询组合查询地理位置查询列存在性查询,根据业务需求选择合适的查询类型。

search -n <indexName> --return_all_indexed

执行命令后根据系统提示输入查询条件(JSON 格式),查询条件包含以下配置项:

参数

必填

说明

Offset

本次查询的开始位置。

Limit

本次查询需要返回的最大数量。如果只为了获取行数无需具体数据,可以设置 Limit 为 0。

Collapse

折叠参数配置,可以按照某一列对结果集做折叠(去重)。FieldName 为列名,只支持整型、浮点数和 Keyword 类型的列。

Sort

返回结果的排序方式。更多信息,请参见查询时指定排序方式。如果未设置排序方式,则按照预排序方式返回;如果未设置预排序,则按照主键排序返回。

GetTotalCount

是否返回匹配的总行数,默认为 false。返回匹配的总行数会影响查询性能。

Token

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

Query

查询类型。多元索引支持全匹配查询(MatchAllQuery)、匹配查询(MatchQuery)、短语匹配查询(MatchPhraseQuery)、精确查询(TermQuery)、多词精确查询(TermsQuery)、前缀查询(PrefixQuery)等查询方式,根据业务需求选择。

Aggregations

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

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

  • Aggregation:统计聚合参数配置,包含 AggName(自定义的统计聚合名称)、Field(用于统计聚合的字段)和 MissingValue(字段为空时的默认值)。

示例

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

search -n search_index --return_all_indexed

根据系统提示输入查询条件。以下示例查询 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"
        }
    }]
}

删除多元索引

drop_search_index -n <indexName> -y

参数

必填

说明

-n,--name

多元索引名称。

-t,--table

数据表名称。已通过use选定数据表时可省略。

-y,--yes

确认删除。命令中必须带有此参数。

示例

删除 search_index 多元索引。

drop_search_index -n search_index -y