表格存储多元索引(Search Index)基于倒排索引和列式存储,可以解决多种大数据复杂的查询问题。创建多元索引后,您可以使用多元索引进行数据查询。

前提条件

  • 已创建数据表,且数据表的最大版本数(max Versions)必须为1。
  • 已初始化Client。具体操作,请参见初始化

接口

分类接口描述
管控接口CreateSearchIndex创建一个多元索引。
DescribeSearchIndex获取多元索引的详细描述信息。
ListSearchIndex列出多元索引的列表。
DeleteSearchIndex删除某个多元索引。
查询接口Search查询接口包括所有的查询功能,以及排序、统计聚合等分析能力,其结果会按照指定的顺序返回。
ParallelScan数据导出接口只包括所有的查询功能,舍弃了排序、统计聚合等分析能力,能将命中的数据以更快的速度全部返回。

多并发导出数据时,您还需要通过ComputeSplits接口获取当前ParallelScan单个请求的最大并发数。

操作步骤

  1. 创建多元索引。具体操作,请参见创建多元索引
  2. 使用Search接口或者ParallelScan接口查询数据,请根据下表说明选择合适的查询方式。
    名称Query描述
    全匹配查询MatchAllQuery常用于查询表中数据总行数,或者随机返回几条数据。
    匹配查询MatchQuery采用近似匹配的方式查询表中的数据。会先对query内容按照配置好的分词器做切分,然后按照切分好后的词去查询。

    不同分词之间的关系是Or,当分词后的多个词只要有部分匹配时,则表示行数据满足查询条件。

    短语匹配查询MatchPhraseQuery类似于MatchQuery,但是只有当分词后的多个词必须在行数据中以同样的顺序和位置存在时,才表示行数据满足查询条件。
    精确查询TermQuery采用完整精确匹配的方式查询表中的数据,类似于字符串匹配。

    对于分词字符串(Text)类型,当分词后的多个词只要有词可以精确匹配时,则表示行数据满足查询条件。

    多词精确查询TermsQuery类似于TermQuery,但是可以一次指定多个词,当多个词中只要有一个词匹配,则表示行数据满足查询条件。
    前缀查询PrefixQuery根据前缀条件查询表中的数据。

    对于分词字符串(Text)类型,当分词后的多个词只要有词满足前缀条件时,则表示行数据满足查询条件。

    范围查询RangeQuery根据范围条件查询表中的数据。

    对于分词字符串(Text)类型,当分词后的多个词只要有词满足范围条件时,则表示行数据满足查询条件。

    通配符查询WildcardQuery要匹配的值可以是一个带有通配符的字符串。

    要匹配的值中可以用星号(“*”)代表任意字符序列,或者用问号(“?”)代表任意单个字符。

    多字段自由组合查询BoolQuery查询条件可以包含一个或者多个子查询条件,根据子查询条件是否满足来判断一行数据是否满足查询条件。

    子查询条件的组合关系支持And、Or、Not等。

    嵌套查询NestedQuery查询嵌套类型中子文档的数据。
    地理距离查询GeoDistanceQuery根据一个中心点和距离条件查询表中的数据,当一个地理位置点到指定的中心点的距离不超过指定的值时,则表示行数据满足查询条件。
    地理长方形范围查询GeoBoundingBoxQuery根据一个长方形范围的地理位置边界条件查询表中的数据,当一个地理位置点落在给出的长方形范围内时,则表示行数据满足查询条件。
    地理多边形范围查询GeoPolygonQuery根据一个多边形范围条件查询表中的数据,当一个地理位置点落在指定的多边形范围内时,则表示行数据满足查询条件。
    列存在性查询ExistQuery也叫NULL查询或者空值查询。一般用于稀疏数据中,用于判断某一行的某一列是否存在。例如查询所有数据中,address列不为空的行有哪些。

    只有当某一列在行数据中不存在或者为空数组("[]")时,则表示在行数据中该列不存在。

相关操作

  • 如果要进行数据分析,例如求最值、求和、统计行数等,您可以使用Search接口的统计聚合功能来实现。具体操作,请参见统计聚合
  • 如果要快速导出数据,而不关心整个结果集的顺序时,您可以使用ParallelScan接口和ComputeSplits接口实现多并发导出数据。具体操作,请参见并发导出数据
  • 当通过Search接口查询数据时,如果要对结果集进行排序或者翻页,您可以使用排序和翻页功能来实现。具体操作,请参见排序和翻页
  • 当通过Search接口查询数据时,如果要按照某一列对结果集做折叠,使对应类型的数据在结果展示中只出现一次,您可以使用折叠(去重)功能来实现。具体操作,请参见折叠(去重)
  • 如果要进行全文检索,您可以对可分词类型的字段进行分词后再选择合适的查询方式来实现。具体操作,请参见分词
  • 如果要进行多层逻辑关系的数据存储和查询,您可以使用嵌套类型存储数据后再选择嵌套查询来实现。具体操作,请参见嵌套类型嵌套类型查询
  • 如果要系统自动清理多元索引中超过保存时间的数据,您可以使用多元索引生命周期功能。具体操作,请参见生命周期管理
  • 如果要在多元索引中新增、更新或者删除索引列,您可以使用动态修改schema功能实现。具体操作,请参见动态修改schema
  • 如果要在不修改数据表的存储结构和数据的情况下,对新字段新数据类型的查询,您可以使用虚拟列功能实现。具体操作,请参见虚拟列