多元索引的核心功能包括任意列的查询(包括主键列和非主键列)、多字段自由组合查询、地理位置查询、全文检索、模糊查询、前缀查询、嵌套查询、去重、排序、查询数据总行数和统计聚合,请根据实际场景需要使用。多元索引部分功能可以实现与SQL功能等价的效果。
核心功能
多元索引支持多维数据查询功能和常用数据统计分析功能。具体功能说明请参见下表。
功能 | 说明 | 文档 |
任意列的查询(包括主键列和非主键列) | 只使用主键列或主键列前缀查询无法满足一些查询场景的需求。 使用多元索引,您可以使用非主键列进行数据查询,只需要对要查询的列建立多元索引,即可通过该列的值查询数据。 | 多元索引任意查询,例如精确查询等 |
多字段自由组合查询 | 多字段自由组合查询适用于订单场景。在订单场景中表的字段可能多达几十个,在创建表时很难完全确定要查询字段的组合方式。即使已确定要查询字段的组合方式,组合方式也会多达上百个。 如果使用关系型数据库可能需要创建上百个索引,而且如果某种组合方式没有提前预想到,未创建相应索引,则无法查询。 使用表格存储,您只需要建立一个多元索引且在索引中包括可能需要查询的字段名,然后在查询数据时随意自由组合这些字段进行查询。同时多元索引还支持多种关系查询,例如And、Or、Not。 | |
地理位置查询 | 随着移动设备的普及,地理位置信息的价值越来越大,越来越多的应用中增加了地理位置信息,例如朋友圈、微博、外卖、运动、车联网等。这些应用中的信息中含有地理位置数据,因此需要相匹配的查询能力。 多元索引支持的地理位置查询功能如下:
基于上述功能,如果应用中需要地理位置相关查询,使用表格存储多元索引即可一站式解决,不再需要借助其他数据库或搜索系统。 | |
全文检索 | 多元索引分词能力可用于支持全文检索,但是多元索引只提供最基础的BM25相关性,不提供自定义相关性能力。因此,如果有相关性的搜索需求,建议使用搜索系统实现,否则可以使用多元索引满足需求。 目前多元索引提供了单字分词、分隔符分词、最小数量语义分词、最大数量语义分词和模糊分词5种分词类型,请根据实际场景配置。 如果要在返回结果对关键词进行高亮显示,您可以使用查询高亮功能来实现。 | |
向量检索 | 多元索引支持向量检索能力,您能够利用数值向量进行高效的近似最近邻查询,从而在大规模数据集中找到最相似的数据项。该功能适用于推荐系统、图像与视频检索、自然语言处理等应用场景。 | |
模糊查询 | 通配符查询等价于关系型数据库中的like功能。您可以通过指定字符和任意通配符( | |
前缀查询 | 前缀查询支持按照前缀匹配所需内容,例如使用 | |
列存在性查询(NULL查询) | 查询某一列是否为空值,类似于NULL查询。 | |
嵌套查询 | 在线应用的数据中,除了扁平化的一层结构外还存在一些更复杂的多层结构场景,例如图片标签。假设某个系统中存储了大量图片,每个图片中都有多个实体(例如房子、轿车、人等),在每个图片中这些实体的位置和空间大小各不相同,因此每个实体的权重(score)不同,这样相当于每个图片均有多个标签,每个标签包括一个名称和一个权重分。如果要根据标签中的条件查询,此时即可使用到嵌套查询。图片标签采取JSON格式存储,数据样例如下:
嵌套查询可以解决多层逻辑关系的数据存储和查询,为复杂数据的建模提供了极大地便利性。 对于包含嵌套类型的复杂数据结构(例如JSON)也支持使用查询高亮功能来精准定位所需信息。 | |
去重 | 多元索引为查询结果提供了去重功能。去重功能可以限制某个属性在一次结果中的最多个数,提供更好的结果多样性能力。例如电商搜索中,搜索一个 | |
排序 | 表格存储提供按照主键的字母顺序排序功能,但如果要按照其他字段排序,您可以使用多元索引的排序能力。 多元索引提供了丰富的排序能力,包括正序或逆序、单条件、多条件等,多元索引排序均为全局排序。多元索引的默认返回结果是按照表中的主键顺序排序。 | |
数据总行数 | 使用多元索引查询时可以指定返回本次请求命中的数据行数。此功能可以用于数据校验、运营等场景。
| |
统计聚合 | 多元索引提供常见的统计聚合功能,包括最大值(Max)、最小值(Min)、平均值(Avg)、求和(Sum)、统计行数(Count)、去重统计行数(DistinctCount)、分组(GroupBy)、百分位(Percentile)、直方图(Histogram)等功能,可以满足用户在轻量级分析场景对基本统计聚合的需求。 |
与SQL匹配情况
多元索引部分功能可以实现与SQL功能等价的效果。SQL中的大部分功能在多元索引中相匹配的功能请参见下表。
SQL | 多元索引 | 多元索引文档 |
Show | API:DescribeSearchIndex | |
Select | 参数:ColumnsToGet | 多元索引任意查询,例如精确查询等 |
From | 参数:index name 重要 已经支持单索引,多索引还未支持。 | 多元索引任意查询,例如精确查询等 |
Where | Query:TermQuery等各种Query | 多元索引任意查询,例如精确查询等 |
Order by | 参数:sort | |
Limit | 参数:limit | |
Delete | API:先Query再DeleteRow |
|
Like | Query:WildcardQuery | |
And | 参数:operator = and | |
Or | 参数:operator = or | |
Not | Query:BoolQuery(mustNotQueries) | |
Between | Query:RangeQuery | |
Null | Query:ExistsQuery | |
In | Query:TermsQuery | |
Min | Aggregation:min | |
Max | Aggregation:max | |
Avg | Aggregation:avg | |
Count | Aggregation:count | |
Count(distinct) | Aggregation:distinctCount | |
Sum | Aggregation:sum | |
Group By | GroupBy |