csusky

          常用鏈接

          統(tǒng)計

          最新評論

          關(guān)于IndexWriter中的3個性能參數(shù)

          IndexWriter中有3個重要的性能參數(shù)
          mergeFactor           默認(rèn)為10
          minMergeDocs      默認(rèn)為10
          maxMergeDocs     默認(rèn)為Integer.maxValue

          maxMergeDocs     一個段中所能包含的最大的doc數(shù),達(dá)到這個數(shù)目即不再將段進(jìn)行合并 一般不改變這個值
          minMergeDocs      是指在RAMDirectory中保存的Doc的個數(shù),達(dá)到minMergeDocs 個即要合并到硬盤上去(在硬盤上新建一個段)
          mergeFactor           合并因子,是控制硬盤上的段的合并的,每次在硬盤上新建一個段之后即執(zhí)行
                                           targetMergeDocs*=mergeFactor(一開始targetMergeDocs=minMergeDocs) 如果硬盤上的doc數(shù)目大于等于                            targetMergeDocs則將硬盤上最后建立的mergeFactor個段進(jìn)行合并成一個段

          拿默認(rèn)的參數(shù)舉例:
          如果硬盤上面已經(jīng)有9個段  每個段分別存儲了10個Document,共(90個DOC),這時候如果程序再向硬盤合并一個新的段(含10個DOC),合并完之后targetMergeDocs=10*10  程序檢查已經(jīng)合并的最后(按照創(chuàng)建的時間先后順序)mergeFactor個段的document的總和100是否大于等于targetMergeDocs(這里是100,剛好滿足要求)于是程序又將硬盤上面的后10個段合并為一個新的段。

          另外一個例子:
          doc數(shù)目            段數(shù)目
            1000---------------9個
            100-----------------9個
            10   ----------------9個
          這時如果再象硬盤中新建一個新的包含了10個doc的段
              doc數(shù)目            段數(shù)目
            (1) 1000----------------9個

            (2)  100-----------------9個

            (3)   10  ----------------9個
                                               
            (4)    10 ----------------1個
          這時候(3)(4)首先合并成一個新的段(3-4)包含100個doc
           然后(2)(3-4)和并成一個新段(2-3-4)包含1000個doc
          然后(1)(2-3-4)合并成一個新的段  包含10000個doc
          最后合并成一個段


          private final void maybeMergeSegments() throws IOException {
              
          long targetMergeDocs = minMergeDocs;
              
          while (targetMergeDocs <= maxMergeDocs) {
                
          // find segments smaller than current target size
                int minSegment = segmentInfos.size();
                
          int mergeDocs = 0;
                
          while (--minSegment >= 0{
                  SegmentInfo si 
          = segmentInfos.info(minSegment);
                  
          if (si.docCount >= targetMergeDocs)
                    
          break;
                  mergeDocs 
          += si.docCount;
                }


                
          if (mergeDocs >= targetMergeDocs)          // found a merge to do
                  mergeSegments(minSegment+1);
                
          else
                  
          break;

                targetMergeDocs 
          *= mergeFactor;        // increase target size
                System.out.println("- -- - -targetMergeDocs:"+targetMergeDocs);
                
          try {Thread.sleep(5000);} catch(Exception e) {};
              }

            }

          posted on 2008-05-15 19:27 曉宇 閱讀(1437) 評論(0)  編輯  收藏 所屬分類: LUCENE

          主站蜘蛛池模板: 河间市| 贵阳市| 营山县| 东宁县| 依兰县| 东乡县| 皮山县| 龙门县| 繁峙县| 祁门县| 永昌县| 延庆县| 鄱阳县| 宁远县| 揭阳市| 永顺县| 古丈县| 乡城县| 德昌县| 夏津县| 绍兴市| 万载县| 芜湖县| 门头沟区| 囊谦县| 南部县| 舞钢市| 威宁| 田阳县| 晋州市| 大邑县| 乌拉特后旗| 汉源县| 沙河市| 长岛县| 枝江市| 富民县| 清水县| 出国| 肇州县| 开封县|