亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? multisegmentreader.java

?? lucene-2.4.0 是一個全文收索的工具包
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package org.apache.lucene.index;/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */import java.io.IOException;import java.util.Collection;import java.util.Collections;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.Map;import java.util.Set;import org.apache.lucene.document.Document;import org.apache.lucene.document.FieldSelector;import org.apache.lucene.store.Directory;/**  * An IndexReader which reads indexes with multiple segments. */class MultiSegmentReader extends DirectoryIndexReader {  protected SegmentReader[] subReaders;  private int[] starts;                           // 1st docno for each segment  private Map normsCache = new HashMap();  private int maxDoc = 0;  private int numDocs = -1;  private boolean hasDeletions = false;  /** Construct reading the named set of readers. */  MultiSegmentReader(Directory directory, SegmentInfos sis, boolean closeDirectory, boolean readOnly) throws IOException {    super(directory, sis, closeDirectory, readOnly);    // To reduce the chance of hitting FileNotFound    // (and having to retry), we open segments in    // reverse because IndexWriter merges & deletes    // the newest segments first.    SegmentReader[] readers = new SegmentReader[sis.size()];    for (int i = sis.size()-1; i >= 0; i--) {      try {        readers[i] = SegmentReader.get(readOnly, sis.info(i));      } catch (IOException e) {        // Close all readers we had opened:        for(i++;i<sis.size();i++) {          try {            readers[i].close();          } catch (IOException ignore) {            // keep going - we want to clean up as much as possible          }        }        throw e;      }    }    initialize(readers);  }  /** This contructor is only used for {@link #reopen()} */  MultiSegmentReader(Directory directory, SegmentInfos infos, boolean closeDirectory, SegmentReader[] oldReaders, int[] oldStarts, Map oldNormsCache, boolean readOnly) throws IOException {    super(directory, infos, closeDirectory, readOnly);    // we put the old SegmentReaders in a map, that allows us    // to lookup a reader using its segment name    Map segmentReaders = new HashMap();    if (oldReaders != null) {      // create a Map SegmentName->SegmentReader      for (int i = 0; i < oldReaders.length; i++) {        segmentReaders.put(oldReaders[i].getSegmentName(), new Integer(i));      }    }        SegmentReader[] newReaders = new SegmentReader[infos.size()];        // remember which readers are shared between the old and the re-opened    // MultiSegmentReader - we have to incRef those readers    boolean[] readerShared = new boolean[infos.size()];        for (int i = infos.size() - 1; i>=0; i--) {      // find SegmentReader for this segment      Integer oldReaderIndex = (Integer) segmentReaders.get(infos.info(i).name);      if (oldReaderIndex == null) {        // this is a new segment, no old SegmentReader can be reused        newReaders[i] = null;      } else {        // there is an old reader for this segment - we'll try to reopen it        newReaders[i] = oldReaders[oldReaderIndex.intValue()];      }      boolean success = false;      try {        SegmentReader newReader;        if (newReaders[i] == null || infos.info(i).getUseCompoundFile() != newReaders[i].getSegmentInfo().getUseCompoundFile()) {          // this is a new reader; in case we hit an exception we can close it safely          newReader = SegmentReader.get(readOnly, infos.info(i));        } else {          newReader = (SegmentReader) newReaders[i].reopenSegment(infos.info(i));        }        if (newReader == newReaders[i]) {          // this reader will be shared between the old and the new one,          // so we must incRef it          readerShared[i] = true;          newReader.incRef();        } else {          readerShared[i] = false;          newReaders[i] = newReader;        }        success = true;      } finally {        if (!success) {          for (i++; i < infos.size(); i++) {            if (newReaders[i] != null) {              try {                if (!readerShared[i]) {                  // this is a new subReader that is not used by the old one,                  // we can close it                  newReaders[i].close();                } else {                  // this subReader is also used by the old reader, so instead                  // closing we must decRef it                  newReaders[i].decRef();                }              } catch (IOException ignore) {                // keep going - we want to clean up as much as possible              }            }          }        }      }    }            // initialize the readers to calculate maxDoc before we try to reuse the old normsCache    initialize(newReaders);        // try to copy unchanged norms from the old normsCache to the new one    if (oldNormsCache != null) {      Iterator it = oldNormsCache.entrySet().iterator();      while (it.hasNext()) {        Map.Entry entry = (Map.Entry) it.next();        String field = (String) entry.getKey();        if (!hasNorms(field)) {          continue;        }        byte[] oldBytes = (byte[]) entry.getValue();        byte[] bytes = new byte[maxDoc()];        for (int i = 0; i < subReaders.length; i++) {          Integer oldReaderIndex = ((Integer) segmentReaders.get(subReaders[i].getSegmentName()));          // this SegmentReader was not re-opened, we can copy all of its norms           if (oldReaderIndex != null &&               (oldReaders[oldReaderIndex.intValue()] == subReaders[i]                  || oldReaders[oldReaderIndex.intValue()].norms.get(field) == subReaders[i].norms.get(field))) {            // we don't have to synchronize here: either this constructor is called from a SegmentReader,            // in which case no old norms cache is present, or it is called from MultiReader.reopen(),            // which is synchronized            System.arraycopy(oldBytes, oldStarts[oldReaderIndex.intValue()], bytes, starts[i], starts[i+1] - starts[i]);          } else {            subReaders[i].norms(field, bytes, starts[i]);          }        }        normsCache.put(field, bytes);      // update cache      }    }  }  private void initialize(SegmentReader[] subReaders) {    this.subReaders = subReaders;    starts = new int[subReaders.length + 1];    // build starts array    for (int i = 0; i < subReaders.length; i++) {      starts[i] = maxDoc;      maxDoc += subReaders[i].maxDoc();      // compute maxDocs      if (subReaders[i].hasDeletions())        hasDeletions = true;    }    starts[subReaders.length] = maxDoc;  }  protected synchronized DirectoryIndexReader doReopen(SegmentInfos infos) throws CorruptIndexException, IOException {    if (infos.size() == 1) {      // The index has only one segment now, so we can't refresh the MultiSegmentReader.      // Return a new [ReadOnly]SegmentReader instead      return SegmentReader.get(readOnly, infos, infos.info(0), false);    } else if (readOnly) {      return new ReadOnlyMultiSegmentReader(directory, infos, closeDirectory, subReaders, starts, normsCache);    } else {      return new MultiSegmentReader(directory, infos, closeDirectory, subReaders, starts, normsCache, false);    }              }  public TermFreqVector[] getTermFreqVectors(int n) throws IOException {    ensureOpen();    int i = readerIndex(n);        // find segment num    return subReaders[i].getTermFreqVectors(n - starts[i]); // dispatch to segment  }  public TermFreqVector getTermFreqVector(int n, String field)      throws IOException {    ensureOpen();    int i = readerIndex(n);        // find segment num    return subReaders[i].getTermFreqVector(n - starts[i], field);  }  public void getTermFreqVector(int docNumber, String field, TermVectorMapper mapper) throws IOException {    ensureOpen();    int i = readerIndex(docNumber);        // find segment num    subReaders[i].getTermFreqVector(docNumber - starts[i], field, mapper);  }  public void getTermFreqVector(int docNumber, TermVectorMapper mapper) throws IOException {    ensureOpen();    int i = readerIndex(docNumber);        // find segment num    subReaders[i].getTermFreqVector(docNumber - starts[i], mapper);  }  public boolean isOptimized() {    return false;  }    public synchronized int numDocs() {    // Don't call ensureOpen() here (it could affect performance)    if (numDocs == -1) {        // check cache      int n = 0;                // cache miss--recompute      for (int i = 0; i < subReaders.length; i++)        n += subReaders[i].numDocs();      // sum from readers      numDocs = n;    }    return numDocs;  }  public int maxDoc() {    // Don't call ensureOpen() here (it could affect performance)    return maxDoc;  }  // inherit javadoc  public Document document(int n, FieldSelector fieldSelector) throws CorruptIndexException, IOException {    ensureOpen();    int i = readerIndex(n);                          // find segment num    return subReaders[i].document(n - starts[i], fieldSelector);    // dispatch to segment reader  }  public boolean isDeleted(int n) {    // Don't call ensureOpen() here (it could affect performance)    final int i = readerIndex(n);                           // find segment num    return subReaders[i].isDeleted(n - starts[i]);    // dispatch to segment reader  }  public boolean hasDeletions() {    // Don't call ensureOpen() here (it could affect performance)    return hasDeletions;  }  protected void doDelete(int n) throws CorruptIndexException, IOException {    numDocs = -1;                             // invalidate cache    int i = readerIndex(n);                   // find segment num    subReaders[i].deleteDocument(n - starts[i]);      // dispatch to segment reader    hasDeletions = true;  }  protected void doUndeleteAll() throws CorruptIndexException, IOException {    for (int i = 0; i < subReaders.length; i++)      subReaders[i].undeleteAll();    hasDeletions = false;    numDocs = -1;                                 // invalidate cache  }  private int readerIndex(int n) {    // find reader for doc n:    return readerIndex(n, this.starts, this.subReaders.length);  }    final static int readerIndex(int n, int[] starts, int numSubReaders) {    // find reader for doc n:    int lo = 0;                                      // search starts array    int hi = numSubReaders - 1;                  // for first element less    while (hi >= lo) {      int mid = (lo + hi) >> 1;      int midValue = starts[mid];      if (n < midValue)        hi = mid - 1;      else if (n > midValue)        lo = mid + 1;      else {                                      // found a match        while (mid+1 < numSubReaders && starts[mid+1] == midValue) {          mid++;                                  // scan to last match        }        return mid;      }    }    return hi;  }  public boolean hasNorms(String field) throws IOException {    ensureOpen();    for (int i = 0; i < subReaders.length; i++) {      if (subReaders[i].hasNorms(field)) return true;    }    return false;  }  private byte[] ones;  private byte[] fakeNorms() {    if (ones==null) ones=SegmentReader.createFakeNorms(maxDoc());    return ones;  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线不卡中文字幕播放| 国产综合久久久久影院| 欧美激情一区在线| 欧美精品一二三| 97久久人人超碰| 成人黄色av网站在线| 国产乱子伦视频一区二区三区| 欧美日本高清视频在线观看| 99热这里都是精品| 日韩专区一卡二卡| 午夜精品视频在线观看| 性做久久久久久| 一区二区三区欧美日韩| 久久亚洲精品国产精品紫薇| 欧美一二三区在线| 欧美女孩性生活视频| 欧美日韩另类国产亚洲欧美一级| av爱爱亚洲一区| 色天天综合久久久久综合片| 在线这里只有精品| 成人av资源在线| 99久久精品国产一区| a美女胸又www黄视频久久| eeuss鲁片一区二区三区在线看| 另类人妖一区二区av| 国产毛片精品国产一区二区三区| 麻豆精品一区二区综合av| 亚洲国产一区二区三区| 亚洲精品视频在线观看免费| 综合婷婷亚洲小说| 一区二区三区中文在线观看| 欧美日韩激情一区二区三区| 亚洲制服欧美中文字幕中文字幕| 精品一区二区三区免费播放| 亚洲天堂久久久久久久| 一区二区三区日韩在线观看| 在线免费不卡电影| 91啦中文在线观看| 欧美日韩一区二区三区在线| 美国三级日本三级久久99| 国产女人水真多18毛片18精品视频| 亚洲国产精品国自产拍av| 亚洲成人午夜电影| 国产精品久久久久一区二区三区共| 97se亚洲国产综合自在线观| 精品欧美一区二区久久| 欧美三级资源在线| 日韩电影在线一区二区三区| 国产一区欧美一区| 99视频精品全部免费在线| 久久综合五月天婷婷伊人| 一区二区三区鲁丝不卡| 色综合天天综合在线视频| 精品播放一区二区| 亚洲成人免费在线观看| 午夜精品久久久久久久99樱桃| 成人一二三区视频| 日韩国产欧美在线观看| 亚洲国产毛片aaaaa无费看| 国产一区二区视频在线播放| 日韩女优制服丝袜电影| 一区二区三区四区蜜桃| 精品国产伦理网| 久久精品国产一区二区三| 一区二区三区不卡视频在线观看| 欧美日韩视频在线观看一区二区三区| 亚洲一区在线视频| 国产suv精品一区二区6| 在线免费观看日本一区| 亚洲成人久久影院| 亚洲一区二区视频在线| 欧美日韩成人高清| 美女精品一区二区| 亚洲精品视频免费观看| 青青草国产精品97视觉盛宴| 国产婷婷一区二区| 亚洲国产欧美日韩另类综合 | 激情综合亚洲精品| 国产精品香蕉一区二区三区| 国产成人免费视频精品含羞草妖精| 成人网在线播放| 精品国产青草久久久久福利| 欧美日韩精品二区第二页| 久久久无码精品亚洲日韩按摩| 欧美v国产在线一区二区三区| 午夜精品一区在线观看| 国产成人精品免费视频网站| 99久久久免费精品国产一区二区| 韩国精品免费视频| 91精选在线观看| 亚洲综合色成人| 日韩国产一二三区| 日本不卡视频在线观看| 中文字幕欧美国产| 亚洲影视在线观看| 精品无码三级在线观看视频| 亚洲美女电影在线| 亚洲欧美综合网| 国产精品免费网站在线观看| 国产成人综合精品三级| 国产麻豆精品视频| 亚洲成av人片一区二区梦乃 | 国产91精品在线观看| 91久久一区二区| 国产人伦精品一区二区| 欧美大黄免费观看| 亚洲午夜影视影院在线观看| 美女在线观看视频一区二区| 色婷婷亚洲一区二区三区| 91精品国产91综合久久蜜臀| 裸体健美xxxx欧美裸体表演| 99久久精品情趣| 欧美成人精品1314www| 看电影不卡的网站| 欧美色图在线观看| 亚洲欧美一区二区视频| 国产精品你懂的在线| 91丨porny丨首页| 精品成人a区在线观看| 日本一区二区三区久久久久久久久不| 中文字幕一区二区不卡| 久久亚洲免费视频| 国产呦精品一区二区三区网站| 91亚洲精品久久久蜜桃| 欧美日韩高清不卡| 精品一区二区三区久久久| 精品国一区二区三区| 免费在线观看精品| 国产成人一区在线| 一区二区三区精品在线观看| 在线精品视频小说1| 一个色综合av| 在线免费不卡视频| 一区二区在线电影| 色综合久久中文综合久久97| 亚洲品质自拍视频| 亚洲精品免费在线观看| 国产精品视频yy9299一区| 在线看日本不卡| 久草中文综合在线| 久久久久久一级片| 国产精品一色哟哟哟| 色吧成人激情小说| 中国av一区二区三区| 日韩你懂的在线播放| 久久er精品视频| 久久久www免费人成精品| 欧美亚洲禁片免费| 日韩精品亚洲一区| 欧美最猛性xxxxx直播| 中文字幕一区免费在线观看| 欧美一区二区在线播放| 青青草国产精品97视觉盛宴| 777奇米成人网| 99这里都是精品| 亚洲一区日韩精品中文字幕| 5858s免费视频成人| 91成人在线精品| 精品国产三级a在线观看| 国产欧美一区在线| 国产精品日韩成人| 亚洲男人天堂av| 国产精品毛片无遮挡高清| 久久午夜国产精品| 91国产免费观看| av电影在线观看一区| 日韩精品久久久久久| 91精品国产综合久久香蕉的特点| 粉嫩绯色av一区二区在线观看| 波波电影院一区二区三区| 日韩女优视频免费观看| 久久久精品人体av艺术| 成人午夜电影网站| 亚洲视频每日更新| 亚洲人成网站色在线观看| 日韩亚洲电影在线| 色中色一区二区| av在线播放一区二区三区| 日韩制服丝袜先锋影音| 国产精品毛片久久久久久| 欧美一级二级三级蜜桃| 91国偷自产一区二区三区观看| 狠狠色综合色综合网络| 日韩毛片精品高清免费| 亚洲人精品午夜| 中文字幕免费一区| 91免费版pro下载短视频| 91视视频在线直接观看在线看网页在线看| 一区二区三区美女| 亚洲国产经典视频| 欧美哺乳videos| 欧美欧美午夜aⅴ在线观看| 成人av电影在线播放| 91碰在线视频| 国产毛片一区二区| 激情综合网激情| 久久久久久电影| 欧美tickling网站挠脚心| 无吗不卡中文字幕| 亚洲天堂福利av|