了解多元索引的字段、接口、查询接口的参数和查询功能列表、使用以及计费。

字段

多元索引的字段值来源于表中同名字段的值,两者的字段类型必须相匹配,匹配规则请参见下表。

多元索引中字段类型 对应表中字段类型 描述
Long Integer 64位长整型。
Double Double 64位双精度浮点数。
Boolean Boolean bool值。
Keyword String 不可分词字符串。
Text String

可分词字符串或文本,请参见分词

Geopoint String 位置点坐标信息,格式为纬度,经度,纬度在前,经度在后,例如"35.8,-45.91"。
Nested String 嵌套类型,例如[{"a": 1}, {"a": 3}]。
注意 上述表中的类型必须一一对应,否则数据会被当做脏数据丢弃,尤其是Geopoint和Nested拥有各自特定的格式。如果格式不匹配也会被当做脏数据丢弃,会出现数据在表中能查询到,但是在多元索引中查询不到的情况。

多元索引字段还支持如下附加属性。

属性 类型 描述
Index Boolean 是否开启索引。
  • 如果为true,则会对该列构建倒排索引或者空间索引。
  • 如果为false,则不会对该列构建索引。

    如果未构建索引,则不能按照该列进行查询。

EnableSortAndAgg Boolean 是否开启排序与统计聚合功能。
  • 如果为true,则可以使用该列进行排序和统计聚合。
  • 如果为false,则不能使用该列进行排序或统计聚合。
Store Boolean 是否在多元索引中附加存储该列的值。

如果为true,则会在多元索引中附加存储该列的值。查询时如果需要读取该列的值,会优先从多元索引中直接读取,无须反查数据表。使用后查询性能更优和更稳定。

IsArray Boolean 是否为数组。

如果为true,则该列是一个数组。在写入时,也必须按照JSON数组格式写入,例如["a","b","c"]。

Nested类型本身就是一个数组,所以无须设置Array。

Array类型不影响查询,所以Array类型的数据可以用于所有的Query查询。

说明 Array和Nested的区别请参见Nested和Array对比
字段类型和字段属性组合使用的情况请参见下表。
类型 Index EnableSortAndAgg Store IsArray
Long 支持 支持 支持 支持
Double 支持 支持 支持 支持
Boolean 支持 支持 支持 支持
keyword 支持 支持 支持 支持
Text 支持 不支持 支持 支持
Geopoint 支持 支持 支持 支持
Nested 只对子字段设置 只对子字段设置 只对子字段设置 Nested本身就是数组

接口

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

查询

查询时需要指定一个SearchRequest,参数说明请参见下表。
参数 类型 描述
offset Integer 本次查询的开始位置。
limit Integer 本次查询需要返回的最大数量。
getTotalCount Boolean 是否返回匹配的总行数,默认关闭,加上后会影响查询性能。
Sort Sort 指定排序的字段和方式。
Collapse Collapse,唯一的参数是设置字段名。 返回结果中按照哪个字段折叠。
query Query 具体的Query类型,完整的Query列表请参见下表。
名称 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列不为空的行有哪些。

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

使用

您可以使用如下语言的SDK实现多元索引功能。

计费

详情请参见多元索引