如果实际业务中要用到非主键列查询、多条件组合查询等多种查询功能,您可以通过控制台为数据表创建多元索引,然后使用多元索引查询数据。
前提条件
已下载命令行工具。具体操作,请参见下载命令行工具。
已启动并配置实例。具体操作,请参见启动并配置。
已获取阿里云账号或RAM用户的AccessKey。具体操作,请参见获取AccessKey。
已创建数据表并使用数据表。具体操作,请参见创建并使用数据表。
其中数据表的最大版本数(max Versions)必须为1,数据生命周期(Time to Live)必须满足如下条件中的任意一个。
数据表的数据生命周期为-1(数据永不过期)。
数据表的数据生命周期不为-1时,数据表为禁止更新状态(即是否允许更新为否)。
注意事项
步骤一:创建多元索引
执行create_search_index
命令创建一个多元索引。
执行
create_search_index
命令创建一个多元索引search_index。create_search_index -n search_index
根据系统提示输入索引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
命令使用多元索引查询和分析数据。支持使用命令行工具操作的多元索引查询类型包括精确查询、多词精确查询、全匹配查询、匹配查询、短语匹配查询、前缀查询、范围查询、通配符查询、模糊查询、多条件组合查询、地理位置查询、嵌套类型查询和列存在性查询,您可以选择合适的查询类型进行多维度数据查询。此处以精确查询为例介绍。
执行search命令使用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" } }] }
常见问题
相关文档
您还可以通过控制台和SDK使用多元索引。具体操作,请参见通过控制台使用多元索引和通过SDK使用多元索引。
如果要对结果集进行排序或者翻页,您可以使用排序和翻页功能来实现。具体操作,请参见排序和翻页。
如果要按照某一列对结果集做折叠,使对应类型的数据在结果展示中只出现一次,您可以使用折叠(去重)功能来实现。具体操作,请参见折叠(去重)。
如果要进行数据分析,例如求最值、求和、统计行数等,您可以使用Search接口的统计聚合功能或者SQL查询来实现。具体操作,请参见统计聚合和SQL查询。
如果要让系统能自动清理多元索引中超过保存时间的数据,您可以使用多元索引生命周期功能。具体操作,请参见生命周期管理。
如果要在多元索引中进行索引列增删改、预排序修改等操作,您可以使用动态修改schema功能实现。具体操作,请参见动态修改schema。
如果要在不修改数据表的存储结构和数据的情况下,对新字段新数据类型的查询,您可以使用虚拟列功能实现。具体操作,请参见虚拟列。