Solr的TrieField範圍查詢分析

2021-09-24 14:33:38 字數 947 閱讀 9475

solr從1.4版本開始,提供了一種字段型別triefield(trielongfield、trieintfield等),用於範圍查詢,效能比普通的數值型別要快10倍。為什麼會快那麼多呢?網上找不到相關資料,通過分析源**,大概了解了其原理,給大家分享下。

其中precisionstep代表字段值分段儲存的時候,截斷精度的大小。一般來說,其值越小,索引大小越大,查詢速度越快。

triefield欄位在lucene中是用多個field來儲存的,field的多少根據precisionstep決定,比如trieintfield,precisionstep=」8″,則儲存到索引中就是4個field,如圖,32位的int,每次縮排8位儲存為乙個field,新的field採用char陣列來儲存。因此索引的大小會比普通的intfield大。

triefield的範圍查詢通過高位範圍匹配,低位邊緣匹配,得到需要查詢的term,再查詢這些term得到docid來實現。

查詢的過程:

1、將查詢的範圍a~b的上下界a、b值,取出最高8位,標記為a1、b1,到第一段找在(a1~b1)內的term,得到需要查詢的termlist1

2、繼續取a、b值的最高16位,標記為a2、b2,到第二段來查在(a2~a111111111]和[b111111111,b2)範圍內的term,得到termlist2

3、繼續取a、b值的最高24位,標記為a3、b3,到第三段來查在(a3~a211111111]和[b211111111,b3)範圍內的term,得到termlist3

4、繼續取a、b值的最高24位,也即a、b值,到第四段來查詢[a~a311111111]和[b311111111,b]範圍內的term,得到termlist4

5、最後查詢這些term,歸併,就得到了符合查詢條件的docid了。從上面的描述,我們可以看到,需要查詢的term最多為254+255*2+255*2+256*2=1786個,傳統的方式a~b個term要小的多,因此效能有很大的提公升。

Solr的TrieField範圍查詢分析

solr從1.4版本開始,提供了一種字段型別triefield trielongfield trieintfield等 用於範圍查詢,效能比普通的數值型別要快10倍。為什麼會快那麼多呢?網上找不到相關資料,通過分析源 大概了解了其原理,給大家分享下。其中precisionstep代表字段值分段儲存的...

范型的轉變

還是回到上次聽講座的時候,第一部分的就是 范型的轉變 其中的內容主要講了瀑布式模型怎麼在一開始就不成立,而因為誤解卻廣為傳播。同時,迭代式開發也並非是瀑布式開發的後繼者或者改良,而是同步發展的另一種對軟體開發的思維方式。也就是另一種范型。呵呵,兩頭牛在聊天,一頭說 最近瘋牛症很流行啊?搞得我擔心的都...

generics 范型 的使用

什麼是范型?u system.collections.generic命名空間包含了范型集合需要的類和介面 u 我們在寫程式的時候 經常需要這種東西 可變長度的 array,比如說乙個 string 而事實上定義了乙個 string 並初始化後那麼它的長度就固定了 array 根本做不到 如果非要實現...