csusky

          常用鏈接

          統計

          最新評論

          關于IndexWriter中的3個性能參數

          IndexWriter中有3個重要的性能參數
          mergeFactor           默認為10
          minMergeDocs      默認為10
          maxMergeDocs     默認為Integer.maxValue

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

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

          另外一個例子:
          doc數目            段數目
            1000---------------9個
            100-----------------9個
            10   ----------------9個
          這時如果再象硬盤中新建一個新的包含了10個doc的段
              doc數目            段數目
            (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 曉宇 閱讀(1432) 評論(0)  編輯  收藏 所屬分類: LUCENE

          主站蜘蛛池模板: 郁南县| 汤原县| 漠河县| 宿松县| 阿合奇县| 丽江市| 冕宁县| 奉节县| 凤庆县| 上蔡县| 霞浦县| 清苑县| 化隆| 阿克苏市| 盐津县| 汝州市| 鄂托克旗| 宝鸡市| 昌邑市| 榆社县| 平武县| 娱乐| 绵阳市| 台南县| 南昌市| 连州市| 兴和县| 遂昌县| 益阳市| 新晃| 乐亭县| 泰州市| 蕲春县| 盐亭县| 会同县| 内黄县| 五常市| 健康| 泸水县| 长汀县| 洞头县|