通过命令行工具使用多元索引

如果实际业务中要用到非主键列查询、多条件组合查询等多种查询功能,您可以通过控制台为数据表创建多元索引,然后使用多元索引查询数据。

前提条件

  • 已下载命令行工具。具体操作,请参见下载命令行工具

  • 已启动并配置实例。具体操作,请参见启动并配置

  • 已获取阿里云账号或RAM用户的AccessKey。具体操作,请参见获取AccessKey

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

    其中数据表的最大版本数(max Versions)必须为1,数据生命周期(Time to Live)必须满足如下条件中的任意一个。

    • 数据表的数据生命周期为-1(数据永不过期)。

    • 数据表的数据生命周期不为-1时,数据表为禁止更新状态(即是否允许更新)。

注意事项

  • 创建多元索引时,多元索引中字段的数据类型必须与数据表中字段的数据类型相匹配。更多信息,请参见数据类型映射

  • 如果要修改为指定数据生命周期(即取值不为-1),则您必须禁用数据表的UpdateRow更新写入功能。同时多元索引的TTL值必须小于或等于数据表的TTL值。更多信息,请参见生命周期管理

步骤一:创建多元索引

执行create_search_index命令创建一个多元索引。

  1. 执行create_search_index命令创建一个多元索引search_index。

    create_search_index -n search_index
  2. 根据系统提示输入索引Schema,示例如下:

    索引Schema包括IndexSetting(索引设置)、FieldSchemas(Index的所有字段的设置)和IndexSort(索引预排序设置)。关于索引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"
                ]
            }
        ]
    }

步骤二:使用多元索引查询和分析数据

执行search命令使用多元索引查询和分析数据。支持使用命令行工具操作的多元索引查询类型包括精确查询多词精确查询全匹配查询匹配查询短语匹配查询前缀查询范围查询通配符查询模糊查询多条件组合查询地理位置查询嵌套类型查询列存在性查询,您可以选择合适的查询类型进行多维度数据查询。此处以精确查询为例介绍。

  1. 执行search命令使用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"
            }
        }]
    }

常见问题

相关文档

  • 您还可以通过控制台和SDK使用多元索引。具体操作,请参见通过控制台使用多元索引通过SDK使用多元索引

  • 如果要对结果集进行排序或者翻页,您可以使用排序和翻页功能来实现。具体操作,请参见排序和翻页

  • 如果要按照某一列对结果集做折叠,使对应类型的数据在结果展示中只出现一次,您可以使用折叠(去重)功能来实现。具体操作,请参见折叠(去重)

  • 如果要进行数据分析,例如求最值、求和、统计行数等,您可以使用Search接口的统计聚合功能或者SQL查询来实现。具体操作,请参见统计聚合SQL查询

  • 如果要让系统能自动清理多元索引中超过保存时间的数据,您可以使用多元索引生命周期功能。具体操作,请参见生命周期管理

  • 如果要在多元索引中进行索引列增删改、预排序修改等操作,您可以使用动态修改schema功能实现。具体操作,请参见动态修改schema

  • 如果要在不修改数据表的存储结构和数据的情况下,对新字段新数据类型的查询,您可以使用虚拟列功能实现。具体操作,请参见虚拟列