數(shù)據(jù)類型
使用多元索引前,您需要了解多元索引支持的數(shù)據(jù)類型以及多元索引中數(shù)據(jù)類型與數(shù)據(jù)表中數(shù)據(jù)類型的映射關(guān)系。
數(shù)據(jù)類型說明
多元索引提供了Long、Double、Boolean、Keyword、Text、Date、Geopoint等基本數(shù)據(jù)類型,數(shù)組類型和嵌套類型等特殊類型以及虛擬列。
基本數(shù)據(jù)類型
多元索引提供了Long、Double、Boolean、Keyword、Text、Date、Geopoint等基本數(shù)據(jù)類型。具體說明請參見下表。
基礎(chǔ)數(shù)據(jù)類型 | 描述 |
Long | 64位長整型。 |
Double | 64位雙精度浮點數(shù)。 |
Boolean | 布爾值。 |
Keyword | 不可分詞字符串。 |
Text | 可分詞字符串或文本。關(guān)于分詞的更多信息,請參見分詞。 |
Date | 日期數(shù)據(jù)類型,支持自定義各種格式日期數(shù)據(jù)。更多信息,請參見日期數(shù)據(jù)類型。 |
Geopoint | 位置點坐標(biāo)信息,格式為 |
數(shù)組和嵌套類型
多元索引除了提供Long、Double、Boolean、Keyword、Text、Date、Geopoint等基本類型外,還提供了數(shù)組類型和嵌套類型兩種特殊類型。數(shù)組類型適用于存儲一系列相同類型的數(shù)據(jù),嵌套類型適用于存儲具有層級結(jié)構(gòu)的數(shù)據(jù),類似于JSON。更多信息,請參見數(shù)組和嵌套類型。
數(shù)組類型
數(shù)組類型僅是多元索引中的概念,數(shù)據(jù)表中還未支持數(shù)組。
數(shù)組類型屬于附加類型,可以附加在Long、Double、Boolean、Keyword、Text、Date、Geopoint等基本類型之上。例如Long類型+數(shù)組后,即為長整型數(shù)組,該字段中可以包括多個長整型數(shù)字,查詢數(shù)據(jù)時其中任何一個匹配都可以返回該行數(shù)據(jù)。數(shù)據(jù)類型適用于存儲一系列相同類型的數(shù)據(jù)。
對于多元索引中數(shù)組類型的字段,在數(shù)據(jù)表中必須為String類型,且對應(yīng)的多元索引中的類型必須為相應(yīng)的類型,例如Long、Double等。如果字段price是Double Array數(shù)組類型,則在數(shù)據(jù)表中price必須為String類型,在對應(yīng)的多元索引中的類型必須為Double類型,且附加isArray=true
屬性。
多元索引的基本類型數(shù)組格式請參見下表。
數(shù)組類型 | 說明 |
Long Array | 長整型的數(shù)組形式,格式為 |
Double Array | 浮點數(shù)的數(shù)組形式,格式為 |
Boolean Array | 布爾值的數(shù)組形式,格式為 |
Keyword Array | 字符串的數(shù)組形式,格式為JSON Array,例如 |
Text Array | 文本的數(shù)組形式,格式為JSON Array,例如 對于Text類型,一般無需使用數(shù)組形式。 |
Date Array | 日期的數(shù)組形式。如果日期類型為整型,則格式為 |
Geopoint Array | 地理位置點的數(shù)組形式,格式為 |
嵌套類型
嵌套類型(Nested)代表嵌套文檔類型。嵌套文檔是指對于一行數(shù)據(jù)(文檔)可以包含多個子行(子文檔),多個子行保存在一個嵌套類型字段中。嵌套類型適用于存儲具有層級結(jié)構(gòu)的數(shù)據(jù)。
對于嵌套類型字段,需要指定其子行的結(jié)構(gòu),即子行中包含哪些字段以及每個字段的屬性。嵌套類型也是類似數(shù)組的多值結(jié)構(gòu),但是更接近JSON類型。
對于多元索引中嵌套類型的字段,在數(shù)據(jù)表中必須為String類型,且對應(yīng)的多元索引中的類型必須為嵌套類型。嵌套類型字段只能使用嵌套類型查詢功能進行數(shù)據(jù)查詢。
在寫入數(shù)據(jù)到數(shù)據(jù)表時,多元索引嵌套類型字段對應(yīng)數(shù)據(jù)表字段的寫入格式必須為JSON對象的數(shù)組格式,例如[{"tagName":"tag1", "score":0.8}, {"tagName":"tag2", "score":0.2}]
。
即使只有一個子行,也必須按照JSON數(shù)組的格式構(gòu)造字符串。
根據(jù)數(shù)據(jù)的層級結(jié)構(gòu)不同,嵌套類型包括單層級嵌套類型和多層級嵌套類型。具體說明請參見下表。
嵌套類型 | 說明 |
單層級嵌套類型 | 在一個數(shù)據(jù)結(jié)構(gòu)中只包含一層其他數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)相對簡單,能表示一定的層次關(guān)系。單層級嵌套類型適用于不需要過多層級但需要一定層級結(jié)構(gòu)的場景。示例如下:
|
多層級嵌套類型 | 在一個數(shù)據(jù)結(jié)構(gòu)中包含了多層嵌套的其他數(shù)據(jù)結(jié)構(gòu),具有更復(fù)雜的層次關(guān)系。多層級嵌套類型適用于需要表示豐富層次、高度模塊化或高度組織化的數(shù)據(jù)模型。示例如下:
|
虛擬列
如果要在不改變表格存儲的存儲結(jié)構(gòu)及數(shù)據(jù)的情況下實現(xiàn)新字段新數(shù)據(jù)類型的查詢功能,您可以使用多元索引虛擬列實現(xiàn)。更多信息,請參見虛擬列。
虛擬列功能支持用戶在創(chuàng)建多元索引的時候?qū)⒈碇幸涣杏成涞蕉嘣饕械奶摂M列。新的虛擬列類型可以不同于表中的原始列類型,以便支持用戶在不修改表結(jié)構(gòu)和數(shù)據(jù)的情況下新建一列,新的列可以用于查詢加速或者采用不同的分詞器。
一個Text字段支持不同的分詞器
單個字符串列可以映射到多元索引多個Text列,不同Text列采用不同的分詞,以便滿足不同的業(yè)務(wù)需求。
查詢加速
不對表中數(shù)據(jù)做清洗和重建,只需要將相應(yīng)列映射為其他類型,即可在部分場景下提升查詢性能。例如數(shù)字類型轉(zhuǎn)換為keyword類型可以提高精確查詢(TermQuery)的性能,string類型轉(zhuǎn)換為數(shù)字類型可以提高范圍查詢(RangeQuery)的性能。
數(shù)據(jù)類型映射
多元索引的字段值來源于數(shù)據(jù)表中同名字段的值,兩者的數(shù)據(jù)類型必須相匹配,多元索引字段數(shù)據(jù)類型與數(shù)據(jù)表中字段數(shù)據(jù)類型的匹配關(guān)系請參見下表。
多元索引中字段數(shù)據(jù)類型 | 數(shù)據(jù)表中字段數(shù)據(jù)類型 |
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 |