多值排重
預設情況下,多值 Attribute 的值是按照文檔順序依次排列的(offset 是遞增的)。實際應用中發現,多值存在著大量的重複,即很多個文檔具有相同的 Attribute 值。開啟多值排重功能,可以去除索引中重複值,從而縮小最終產出的索引大小。
此功能,除多值 Attribute 和單值 String 外,還適用於 Section Attribute。
由於排重的過程,需要引入排重詞典的等輔助資料結構,會增加 Build 和 Merge 的記憶體開銷,所以,如果欄位重複度很低時,不建議配置。
等值壓縮
實際應用中,單值 attribute 和多值 attribute 的 offset 值在按照某個欄位全域排序後,相等的值經常連續出現,如果對連續出現的相等值數組進行壓縮能夠獲得較大的儲存空間收益。等值壓縮就是通過用更少的 Bit 位來代表這些重複值,來壓縮索引的。
此功能,適用於單值和多值 Attribute 的 Offset 檔案。對於多值 Attribute (包括單值 String) 和 Section Attribute 可以同時使用多值排重和等值壓縮。
自適應Offset
由於每個多值 Attribute 都是單獨儲存的,Schema 中多少多值 Attribute 就要產生多少 Offset 檔案,如果每個 Offset 都使用 8Bit 長度,將是一種極大的浪費。因此,我們支援了一種叫做自適應 Offset 的功能,當產生的 Data 檔案長度不足 4GB 時,使用 4Bit 儲存。無需配置。
配置範例
{
...
"fields":[
{
"field_name":"category",
"field_type":"INTEGER",
"multi_value":true,
"compress_type":"uniq|equal"
},
{
"field_name":"price",
"field_type":"INTEGER",
"user_defined_param":{
"key":"hello"
}
}
]
...
}
multi_value:true/false,預設為false,表示欄位是否為多值。
compress_type: 指定該欄位作為attribute欄位儲存時的壓縮方法,預設值為空白字串(不壓縮)。可選項:
值排重:uniq
等值壓縮:equal
patch 檔案壓縮:patch_compress
可同時配置多項,使用 | 分隔,如:uniq | equal
多值float壓縮:支援 block_fp,fp16,int8#N(N表示一個數值,表示float的值在-N和+N之間)
單值float壓縮:支援 fp16,int8#N;注意配了單值float壓縮就不支援再配置uniq | equal壓縮