談談lucene的DocValues特性之NumericDocValuesField

在默認實現的DocValuesCosumer中,數值有可能分塊存儲也有可能放在一個數據塊中存儲。排序

分塊的大小默認是16384,而且經過預先計算若是按一個塊存儲最大值與最小值的差所佔用的比特數和分塊存儲後最大值與最小值的差所佔用的比特數,當節約的比特數大於10%時才分塊存儲,不然就會按一個數據塊存儲。原理

當按照一個數據塊存儲時,又分了兩種狀況(這裏強調一下,不管是否分塊都會經過求解的最大公約數將每一個數值減去最小值後除之進行壓縮!):數據

一、當惟一值個數小於等於256時會將值從小到大的排序後從0-(size-1)從新賦予新的編號進行壓縮存儲,這樣新的值就小於等於255。若是新值佔用的比特數比通過最大公約數壓縮後還要小就會按照新的編號進行壓縮存儲;壓縮

二、不知足1的條件就按照最大公約數壓縮存儲。

這裏留個疑問:爲何不重複的值個數選擇了256?由於目前只是根據代碼推測原理,這個問題估計等到本身寫代碼時會自行解決。

相關文章
相關標籤/搜索