|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
手机用到的是用j2me所编出来的小程序。solr从1.4版本入手下手,供应了一种字段范例TrieField(TrieLongField、TrieIntField等),用于局限查询,功能比一般的数值范例要快10倍。为何会快那末多呢?网上找不到相干材料,经由过程剖析源代码,也许懂得了其道理,给人人分享下。
<fieldTypename=”tint”precisionStep=”8″omitNorms=”true”positionIncrementGap=”0″/>
个中precisionStep代表字段值分段保留的时分,截断精度的巨细。一样平常来讲,其值越小,索引巨细越年夜,查找速率越快。
TrieField字段在lucene中是用多个field来保留的,field的几依据precisionStep决意,好比TrieIntField,precisionStep=”8″,则保留到索引中就是4个field,如图,32位的Int,每次缩进8位保留为一个field,新的field接纳char数组来保留。因而索引的巨细会比一般的IntField年夜。
<br>
TrieField的局限查询经由过程高位局限婚配,低位边沿婚配,失掉必要查询的term,再查询这些term失掉docid来完成。如图:
<br>
查找的历程:
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要小的多,因而功能有很年夜的提拔。
Java到底会发战成什么样,让我们拭目以待吧,我始终坚信着java会更好。以上都是俺个人看法,欢迎大家一起交流. |
|