1.一種針對(duì)海量數(shù)據(jù)全文檢索場(chǎng)景的實(shí)現(xiàn)方法,在檢索引擎對(duì)輸入的SQL語句分析后形成執(zhí)行計(jì)劃樹,將執(zhí)行計(jì)劃樹切割成執(zhí)行單元fragment,通過協(xié)調(diào)器分發(fā)到節(jié)點(diǎn)上執(zhí)行并返回結(jié)果;其特征在于,將Lucene引入檢索引擎,對(duì)集群中已經(jīng)存在的數(shù)據(jù)文件建立Lucene索引文件,一個(gè)數(shù)據(jù)文件對(duì)應(yīng)一個(gè)或多個(gè)Lucene索引文件,一個(gè)Lucene索引文件存儲(chǔ)在一個(gè)節(jié)點(diǎn)上,在每個(gè)存儲(chǔ)Lucene索引文件的節(jié)點(diǎn)上,設(shè)置有一個(gè)守護(hù)進(jìn)程對(duì)該節(jié)點(diǎn)的Lucene索引文件進(jìn)行維護(hù),保持Lucene索引文件與RCFile文件所管理的數(shù)據(jù)文件的一致性;每個(gè)節(jié)點(diǎn)設(shè)置有一個(gè)Lucene的socket接口;所述的全文檢索場(chǎng)景的實(shí)現(xiàn)方法包含如下方面:
第一方面,優(yōu)化協(xié)調(diào)器對(duì)fragment的調(diào)度機(jī)制;
在一個(gè)fragment中,有一個(gè)結(jié)構(gòu)體range,range中記載有Lucene索引文件地址列表;
在檢索時(shí),遍歷所有fragment中的range,對(duì)每個(gè)range,執(zhí)行下面過程:
獲取該range對(duì)應(yīng)的Lucene索引文件地址列表;對(duì)列表中的每個(gè)Lucene索引文件地址,執(zhí)行過程(1)和(2);(1)判斷該地址是否位于所執(zhí)行的fragment的本地節(jié)點(diǎn)上,若是,則設(shè)置該索引文件所在節(jié)點(diǎn)的預(yù)加值A(chǔ)為1,若不是,設(shè)置該索引文件所在節(jié)點(diǎn)的預(yù)加值A(chǔ)為設(shè)定的固定最大值;(2)將該索引文件所在節(jié)點(diǎn)的當(dāng)前計(jì)數(shù)B,加上預(yù)加值A(chǔ),得到新的計(jì)數(shù)值C;其中,每個(gè)節(jié)點(diǎn)的計(jì)數(shù)值初始設(shè)置為0;在得到該range的每個(gè)Lucene索引文件所在節(jié)點(diǎn)的計(jì)數(shù)C后,選擇其中計(jì)數(shù)C最小的節(jié)點(diǎn),作為該range的執(zhí)行節(jié)點(diǎn),然后更新該節(jié)點(diǎn)的當(dāng)前計(jì)數(shù)B為對(duì)應(yīng)的計(jì)數(shù)值C,標(biāo)記該range將最終在該節(jié)點(diǎn)上執(zhí)行;
第二方面,優(yōu)化全文讀取引擎機(jī)制;
節(jié)點(diǎn)執(zhí)行一個(gè)fragment時(shí),若對(duì)應(yīng)的Lucene索引文件在本地節(jié)點(diǎn),直接通過JNI調(diào)用Lucene接口,獲取檢索結(jié)果集;若對(duì)應(yīng)的Lucene索引文件在遠(yuǎn)程節(jié)點(diǎn),調(diào)用socket接口通過遠(yuǎn)程tcp訪問遠(yuǎn)程節(jié)點(diǎn)的Lucene接口,獲取檢索結(jié)果集;socket接口還用于RCFile與Lucene中元數(shù)據(jù)變化時(shí)的更新;JNI表示Java本地接口,tcp表示傳輸控制協(xié)議;
若調(diào)用訪問Lucene接口時(shí),對(duì)應(yīng)節(jié)點(diǎn)上維護(hù)Lucene索引文件的守護(hù)進(jìn)程已經(jīng)掛掉,或遠(yuǎn)程tcp連接無法建立時(shí),則執(zhí)行節(jié)點(diǎn)直接選擇讀取RCFile文件;若讀取Lucene索引文件出錯(cuò)時(shí),執(zhí)行節(jié)點(diǎn)重新調(diào)用該Lucene索引文件對(duì)應(yīng)的RCFile文件,重新進(jìn)行檢索。
2.根據(jù)權(quán)利要求1所述的一種針對(duì)海量數(shù)據(jù)全文檢索場(chǎng)景的實(shí)現(xiàn)方法,其特征在于,所述的針對(duì)海量數(shù)據(jù)全文檢索場(chǎng)景的實(shí)現(xiàn)方法,還包括如下方面:
第三方面,實(shí)現(xiàn)全文檢索的相關(guān)度排序;相關(guān)度的排序通過設(shè)置權(quán)重實(shí)現(xiàn);
在檢索某個(gè)字段時(shí),給該字段設(shè)置權(quán)重,在Lucene檢索時(shí),將權(quán)重加入字段中,檢索返回根據(jù)權(quán)值排序的結(jié)果數(shù)據(jù),將各Lucene檢索的結(jié)果數(shù)據(jù)匯總并根據(jù)權(quán)重再進(jìn)行一次排序,最后將符合以相關(guān)度排序的數(shù)據(jù)結(jié)果集返回給用戶;
在檢索時(shí),若是分組數(shù)據(jù),對(duì)分組數(shù)據(jù)的權(quán)重值先進(jìn)行融合計(jì)算,再按照融合后的權(quán)重值,對(duì)分組數(shù)據(jù)進(jìn)行相關(guān)度的排序。