真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

lucene4.7分頁技術(shù)怎么使用

本篇內(nèi)容介紹了“l(fā)ucene4.7分頁技術(shù)怎么使用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

四川網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,四川網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為四川千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的四川做網(wǎng)站的公司定做!

在介紹分頁之前,我們先來看看上面的那個需求,不用分頁的解決辦法, 
其實在lucene里面,每一個索引都會對應(yīng)一個不重復(fù)的docid,而這一點跟Oralce數(shù)據(jù)庫的偽列rownum一樣,恰恰正是由于這個docid的存在,所以讓lucene在海量數(shù)據(jù)檢索時從而擁有更好的性能,我們都知道Oracle數(shù)據(jù)庫在分頁時,使用的就是偽列進行分頁,那么我的lucene也是一樣,既然有一個docid的存在,那么上面的需求就很簡單了。
 

方法一:依次根據(jù)每個docid獲取文檔然后寫入txt中,這樣的以來,就避免了內(nèi)存不足的缺點,但是這樣單條讀取的話,速度上可能會慢一點,但能滿足需求無可厚非。偽代碼如下

    try{
        directory=FSDirectory.open(new File(indexReadPath));//打開索引文件夾
        IndexReader  reader=DirectoryReader.open(directory);//讀取目錄
        IndexSearcher search=new IndexSearcher(reader);//初始化查詢組件
        for(int i=0;i

Lucene的分頁,總的來說有兩種形式,總結(jié)如下圖表格。(如果存在不合適之處,歡迎指正?。?/strong>

編號方式優(yōu)點缺點
1在ScoresDocs里進行分頁無需再次查詢索引,速度很快在海量數(shù)據(jù)時,會內(nèi)存溢出
2利用SearchAfter,再次查詢分頁適合大批量數(shù)據(jù)的分頁再次查詢,速度相對慢一點,但可以利用緩存彌補

從上圖我們可以分析出,ScoreDocs適合在數(shù)據(jù)量不是很大的場景下進行分頁,而SearchAfter則都適合,所以,我們要根據(jù)自己的業(yè)務(wù)需求,合理的選出適合自己的分頁方式。 

在我們了解這2中分頁技術(shù)的優(yōu)缺點之后,我們再來探討下上面那個讀2億數(shù)據(jù)存入txt文本里,在這里,SocreDocs不適合這種場景,當然如果你內(nèi)存足夠大的話,可以嘗試下,通用分頁分批讀取的方式,可以提升我們的寫入效率,效果是比單條單條讀取的速度是要快很多的。雖然ScoresDocs的分頁方式在本需求上不適合,但是作為示例,下面散仙給出使用ScoreDocs進行分頁的代碼:

    try{
        directory=FSDirectory.open(new File(indexReadPath));//打開索引文件夾
        IndexReader  reader=DirectoryReader.open(directory);//讀取目錄
        IndexSearcher search=new IndexSearcher(reader);//初始化查詢組件
        
 
         TopDocs all=search.search(new MatchAllDocsQuery(), 50000);
         int offset=0;//起始位置
         int pageSize=30;//分頁的條數(shù)
         int total=30;//結(jié)束條數(shù)
         int z=0;
         while(z<=50){//總分頁數(shù)
         System.out.println("==============================");
         pageScoreDocs(offset,total,search, all.scoreDocs);//調(diào)用分頁打印
         offset=(z*pageSize+pageSize);//下一頁的位置增量
         z++;//分頁數(shù)+1;
             total=offset+pageSize;//下一次的結(jié)束分頁量
         }
         reader.close();//關(guān)閉資源
         directory.close();//關(guān)閉連接
        
        }catch(Exception e){
            e.printStackTrace();
        }
public void pageScoreDocs(int offset,int total,IndexSearcher searcher,ScoreDoc[] doc) throws Exception{
        //System.out.println("offset:"+offset+"===>"+total);
        for(int i=offset;i"+doc.length);
            if(i>doc.length-1){//當分頁的長度數(shù)大于總數(shù)就停止
                
                break;
            }else{
        
               Document dosc=searcher.doc(doc[i].doc);
               System.out.println(dosc.get("name"));
           
            }
        }

最后我們來看下使用SearcherAfter進行分頁的方式,代碼如下:

    try{
        directory=FSDirectory.open(new File(indexReadPath));//打開索引文件夾
        IndexReader  reader=DirectoryReader.open(directory);//讀取目錄
        IndexSearcher search=new IndexSearcher(reader);//初始化查詢組件
        
         int pageStart=0;
         ScoreDoc lastBottom=null;//相當于pageSize
         while(pageStart<10){//這個只有是paged.scoreDocs.length的倍數(shù)加一才有可能翻頁操作
             TopDocs paged=null;
             paged=search.searchAfter(lastBottom, new MatchAllDocsQuery(),null,30);//查詢首次的30條
             if(paged.scoreDocs.length==0){
                 break;//如果下一頁的命中數(shù)為0的情況下,循環(huán)自動結(jié)束
             }
             page(search,paged);//分頁操作,此步是傳到方法里對數(shù)據(jù)做處理的
             
             pageStart+=paged.scoreDocs.length;//下一次分頁總在上一次分頁的基礎(chǔ)上
             lastBottom=paged.scoreDocs[paged.scoreDocs.length-1];//上一次的總量-1,成為下一次的lastBottom
         }
         reader.close();//關(guān)閉資源
         directory.close();//關(guān)閉連接
        
        }catch(Exception e){
            e.printStackTrace();
        }

“l(fā)ucene4.7分頁技術(shù)怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


標題名稱:lucene4.7分頁技術(shù)怎么使用
文章出自:http://weahome.cn/article/gdccde.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部