数据类型

使用多元索引前,您需要了解多元索引支持的数据类型以及多元索引中数据类型与数据表中数据类型的映射关系。

数据类型说明

多元索引提供了Long、Double、Boolean、Keyword、Text、Date、Geopoint等基本数据类型,数组类型和嵌套类型等特殊类型以及虚拟列。

基本数据类型

多元索引提供了Long、Double、Boolean、Keyword、Text、Date、Geopoint等基本数据类型。具体说明请参见下表。

基础数据类型

描述

Long

64位长整型。

Double

64位双精度浮点数。

Boolean

布尔值。

Keyword

不可分词字符串。

Text

可分词字符串或文本。关于分词的更多信息,请参见分词

Date

日期数据类型,支持自定义各种格式日期数据。更多信息,请参见日期数据类型

Geopoint

位置点坐标信息,格式为纬度,经度,纬度在前,经度在后,且纬度范围为[-90,+90],经度范围为[-180,+180]。例如35.8,-45.91

数组和嵌套类型

多元索引除了提供Long、Double、Boolean、Keyword、Text、Date、Geopoint等基本类型外,还提供了数组类型和嵌套类型两种特殊类型。数组类型适用于存储一系列相同类型的数据,嵌套类型适用于存储具有层级结构的数据,类似于JSON。更多信息,请参见数组和嵌套类型

数组类型

重要

数组类型仅是多元索引中的概念,数据表中还未支持数组。

数组类型属于附加类型,可以附加在Long、Double、Boolean、Keyword、Text、Date、Geopoint等基本类型之上。例如Long类型+数组后,即为长整型数组,该字段中可以包括多个长整型数字,查询数据时其中任何一个匹配都可以返回该行数据。数据类型适用于存储一系列相同类型的数据。

对于多元索引中数组类型的字段,在数据表中必须为String类型,且对应的多元索引中的类型必须为相应的类型,例如Long、Double等。如果字段priceDouble Array数组类型,则在数据表中price必须为String类型,在对应的多元索引中的类型必须为Double类型,且附加isArray=true属性。

多元索引的基本类型数组格式请参见下表。

数组类型

说明

Long Array

长整型的数组形式,格式为"[1000, 4, 5555]"

Double Array

浮点数的数组形式,格式为"[3.1415926, 0.99]"

Boolean Array

布尔值的数组形式,格式为"[true, false]"

Keyword Array

字符串的数组形式,格式为JSON Array,例如"[\"杭州\", \"西安\"]"

Text Array

文本的数组形式,格式为JSON Array,例如"[\"杭州\", \"西安\"]"

对于Text类型,一般无需使用数组形式。

Date Array

日期的数组形式。如果日期类型为整型,则格式为"[1218197720123, 1712850436000]";如果日期类型为字符串,则格式为"[\"2024-04-11 23:47:16.854775807\", \"2024-06-11 23:47:16.854775807\"]"

Geopoint Array

地理位置点的数组形式,格式为"[\"34.2, 43.0\", \"21.4, 45.2\"]"

嵌套类型

嵌套类型(Nested)代表嵌套文档类型。嵌套文档是指对于一行数据(文档)可以包含多个子行(子文档),多个子行保存在一个嵌套类型字段中。嵌套类型适用于存储具有层级结构的数据。

对于嵌套类型字段,需要指定其子行的结构,即子行中包含哪些字段以及每个字段的属性。嵌套类型也是类似数组的多值结构,但是更接近JSON类型。

对于多元索引中嵌套类型的字段,在数据表中必须为String类型,且对应的多元索引中的类型必须为嵌套类型。嵌套类型字段只能使用嵌套类型查询功能进行数据查询。

在写入数据到数据表时,多元索引嵌套类型字段对应数据表字段的写入格式必须为JSON对象的数组格式,例如[{"tagName":"tag1", "score":0.8}, {"tagName":"tag2", "score":0.2}]

重要

即使只有一个子行,也必须按照JSON数组的格式构造字符串。

根据数据的层级结构不同,嵌套类型包括单层级嵌套类型和多层级嵌套类型。具体说明请参见下表。

嵌套类型

说明

单层级嵌套类型

在一个数据结构中只包含一层其他数据结构,结构相对简单,能表示一定的层次关系。单层级嵌套类型适用于不需要过多层级但需要一定层级结构的场景。示例如下:

[
    {
        "tagName": "tag1",
        "score": 0.8
    },
    {
        "tagName": "tag2",
        "score": 0.2
    }
]

多层级嵌套类型

在一个数据结构中包含了多层嵌套的其他数据结构,具有更复杂的层次关系。多层级嵌套类型适用于需要表示丰富层次、高度模块化或高度组织化的数据模型。示例如下:

[
    {
        "name": "张三",
        "age": 20,
        "phone": "1390000****",
        "address": [
            {
                "province": "浙江省",
                "city": "杭州市",
                "street": "阳光大道幸福小区1201号"
            }
        ]
    }
]

虚拟列

如果要在不改变表格存储的存储结构及数据的情况下实现新字段新数据类型的查询功能,您可以使用多元索引虚拟列实现。更多信息,请参见虚拟列

虚拟列功能支持用户在创建多元索引的时候将表中一列映射到多元索引中的虚拟列。新的虚拟列类型可以不同于表中的原始列类型,以便支持用户在不修改表结构和数据的情况下新建一列,新的列可以用于查询加速或者采用不同的分词器。

  • 一个Text字段支持不同的分词器

    单个字符串列可以映射到多元索引多个Text列,不同Text列采用不同的分词,以便满足不同的业务需求。

  • 查询加速

    不对表中数据做清洗和重建,只需要将相应列映射为其他类型,即可在部分场景下提升查询性能。例如数字类型转换为keyword类型可以提高精确查询(TermQuery)的性能,string类型转换为数字类型可以提高范围查询(RangeQuery)的性能。

数据类型映射

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

多元索引中字段数据类型

数据表中字段数据类型

Long

Integer

Long Array

String

Double

Double

Double Array

String

Boolean

Boolean

Boolean Array

String

Keyword

String

Keyword Array

String

Date

Integer、String

Date Array

String

Geopoint

String

Geopoint Array

String

Text

String

Nested

String