使用多元索引前,您需要了解多元索引支持的數據類型以及多元索引中數據類型與數據表中數據類型的映射關系。
數據類型說明
多元索引提供了 Long、Double、Boolean、Keyword、Text、Date、Geopoint、Vector 等基本數據類型,數組類型和嵌套類型等特殊類型以及虛擬列。
表格存儲 Java SDK 版本從 5.13.9 版本開始支持多元索引 Date 類型。如需使用多元索引 Date 類型,請確保獲取了正確的 Java SDK 版本。關于 Java SDK 歷史迭代版本的更多信息,請參見 Java SDK 歷史迭代版本。
基本數據類型
多元索引提供了 Long、Double、Boolean、Keyword、Text、Date、Geopoint、Vector 等基本數據類型。具體說明請參見下表。
基礎數據類型 | 描述 |
Long | 64 位長整型。 |
Double | 64 位雙精度浮點數。 |
Boolean | 布爾值。 |
Keyword | 不可分詞字符串。 |
Text | 可分詞字符串或文本。關于分詞的更多信息,請參見分詞。 |
Date | 日期數據類型,支持自定義各種格式日期數據。更多信息,請參見日期時間類型。 |
Geopoint | 位置點坐標信息,格式為 |
Vector | 向量類型,格式為 Float32 數組的字符串,數組長度與該字段的維度相等。例如向量字符串 |
數組和嵌套類型
多元索引除了提供 Long、Double、Boolean、Keyword、Text、Date、Geopoint、Vector 等基本類型外,還提供了數組類型和嵌套類型兩種特殊類型。數組類型適用于存儲一系列相同類型的數據,嵌套類型適用于存儲具有層級結構的數據,類似于 JSON。更多信息,請參見數組和嵌套類型。
數組類型
數組類型僅是多元索引中的概念,數據表中還未支持數組。
向量Vector類型暫時不支持數組。
數組類型屬于附加類型,可以附加在Long、Double、Boolean、Keyword、Text、Date、Geopoint等基本類型之上。例如Long類型+數組后,即為長整型數組,該字段中可以包括多個長整型數字,查詢數據時其中任何一個匹配都可以返回該行數據。數據類型適用于存儲一系列相同類型的數據。
對于多元索引中數組類型的字段,在數據表中必須為String類型,且對應的多元索引中的類型必須為相應的類型,例如Long、Double等。如果字段price是Double Array數組類型,則在數據表中price必須為String類型,在對應的多元索引中的類型必須為Double類型,且附加isArray=true
屬性。
多元索引的基本類型數組格式請參見下表。
數組類型 | 說明 |
Long Array | 長整型的數組形式,格式為 |
Double Array | 浮點數的數組形式,格式為 |
Boolean Array | 布爾值的數組形式,格式為 |
Keyword Array | 字符串的數組形式,格式為JSON Array,例如 |
Text Array | 文本的數組形式,格式為JSON Array,例如 對于Text類型,一般無需使用數組形式。 |
Date Array | 日期的數組形式。如果日期類型為整型,則格式為 |
Geopoint Array | 地理位置點的數組形式,格式為 |
嵌套類型
嵌套類型(Nested)代表嵌套文檔類型。嵌套文檔是指對于一行數據(文檔)可以包含多個子行(子文檔),多個子行保存在一個嵌套類型字段中。嵌套類型適用于存儲具有層級結構的數據。
對于嵌套類型字段,需要指定其子行的結構,即子行中包含哪些字段以及每個字段的屬性。嵌套類型也是類似數組的多值結構,但是更接近JSON類型。
對于多元索引中嵌套類型的字段,在數據表中必須為String類型,且對應的多元索引中的類型必須為嵌套類型。嵌套類型字段只能使用嵌套類型查詢功能進行數據查詢。
在寫入數據到數據表時,多元索引嵌套類型字段對應數據表字段的寫入格式必須為JSON對象的數組格式,例如[{"tagName":"tag1", "score":0.8}, {"tagName":"tag2", "score":0.2}]
。
即使只有一個子行,也必須按照JSON數組的格式構造字符串。
根據數據的層級結構不同,嵌套類型包括單層級嵌套類型和多層級嵌套類型。具體說明請參見下表。
嵌套類型 | 說明 |
單層級嵌套類型 | 在一個數據結構中只包含一層其他數據結構,結構相對簡單,能表示一定的層次關系。單層級嵌套類型適用于不需要過多層級但需要一定層級結構的場景。示例如下:
|
多層級嵌套類型 | 在一個數據結構中包含了多層嵌套的其他數據結構,具有更復雜的層次關系。多層級嵌套類型適用于需要表示豐富層次、高度模塊化或高度組織化的數據模型。示例如下:
|
虛擬列
如果要在不改變表格存儲的存儲結構及數據的情況下實現新字段新數據類型的查詢功能,您可以使用多元索引虛擬列實現。更多信息,請參見虛擬列。
虛擬列功能支持用戶在創建多元索引的時候將表中一列映射到多元索引中的虛擬列。新的虛擬列類型可以不同于表中的原始列類型,以便支持用戶在不修改表結構和數據的情況下新建一列,新的列可以用于查詢加速或者采用不同的分詞器。
一個 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 |
Text | String |
Date | Integer、String |
Date Array | String |
Geopoint | String |
Geopoint Array | String |
Vector | String |
Nested | String |