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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? multireader.java

?? lucene完整源碼
?? JAVA
字號:
package org.apache.lucene.index;/** * Copyright 2004 The Apache Software Foundation * * Licensed 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 org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.store.Directory;import java.io.IOException;import java.util.*;/** An IndexReader which reads multiple indexes, appending their content. * * @version $Id: MultiReader.java 387550 2006-03-21 15:36:32Z yonik $ */public class MultiReader extends IndexReader {  private IndexReader[] subReaders;  private int[] starts;                           // 1st docno for each segment  private Hashtable normsCache = new Hashtable();  private int maxDoc = 0;  private int numDocs = -1;  private boolean hasDeletions = false; /**  * <p>Construct a MultiReader aggregating the named set of (sub)readers.  * Directory locking for delete, undeleteAll, and setNorm operations is  * left to the subreaders. </p>  * <p>Note that all subreaders are closed if this Multireader is closed.</p>  * @param subReaders set of (sub)readers  * @throws IOException  */  public MultiReader(IndexReader[] subReaders) throws IOException {    super(subReaders.length == 0 ? null : subReaders[0].directory());    initialize(subReaders);  }  /** Construct reading the named set of readers. */  MultiReader(Directory directory, SegmentInfos sis, boolean closeDirectory, IndexReader[] subReaders) {    super(directory, sis, closeDirectory);    initialize(subReaders);  }  private void initialize(IndexReader[] 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;  }  /** Return an array of term frequency vectors for the specified document.   *  The array contains a vector for each vectorized field in the document.   *  Each vector vector contains term numbers and frequencies for all terms   *  in a given vectorized field.   *  If no such fields existed, the method returns null.   */  public TermFreqVector[] getTermFreqVectors(int n) throws IOException {    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 {    int i = readerIndex(n);        // find segment num    return subReaders[i].getTermFreqVector(n - starts[i], field);  }  public synchronized int numDocs() {    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() {    return maxDoc;  }  public Document document(int n) throws IOException {    int i = readerIndex(n);                          // find segment num    return subReaders[i].document(n - starts[i]);    // dispatch to segment reader  }  public boolean isDeleted(int n) {    int i = readerIndex(n);                           // find segment num    return subReaders[i].isDeleted(n - starts[i]);    // dispatch to segment reader  }  public boolean hasDeletions() { return hasDeletions; }  protected void doDelete(int n) throws 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 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:    int lo = 0;                                      // search starts array    int hi = subReaders.length - 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 < subReaders.length && starts[mid+1] == midValue) {          mid++;                                  // scan to last match        }        return mid;      }    }    return hi;  }  public boolean hasNorms(String field) throws IOException {    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;  }  public synchronized byte[] norms(String field) throws IOException {    byte[] bytes = (byte[])normsCache.get(field);    if (bytes != null)      return bytes;          // cache hit    if (!hasNorms(field))      return fakeNorms();    bytes = new byte[maxDoc()];    for (int i = 0; i < subReaders.length; i++)      subReaders[i].norms(field, bytes, starts[i]);    normsCache.put(field, bytes);      // update cache    return bytes;  }  public synchronized void norms(String field, byte[] result, int offset)    throws IOException {    byte[] bytes = (byte[])normsCache.get(field);    if (bytes==null && !hasNorms(field)) bytes=fakeNorms();    if (bytes != null)                            // cache hit      System.arraycopy(bytes, 0, result, offset, maxDoc());    for (int i = 0; i < subReaders.length; i++)      // read from segments      subReaders[i].norms(field, result, offset + starts[i]);  }  protected void doSetNorm(int n, String field, byte value)    throws IOException {    normsCache.remove(field);                         // clear cache    int i = readerIndex(n);                           // find segment num    subReaders[i].setNorm(n-starts[i], field, value); // dispatch  }  public TermEnum terms() throws IOException {    return new MultiTermEnum(subReaders, starts, null);  }  public TermEnum terms(Term term) throws IOException {    return new MultiTermEnum(subReaders, starts, term);  }  public int docFreq(Term t) throws IOException {    int total = 0;          // sum freqs in segments    for (int i = 0; i < subReaders.length; i++)      total += subReaders[i].docFreq(t);    return total;  }  public TermDocs termDocs() throws IOException {    return new MultiTermDocs(subReaders, starts);  }  public TermPositions termPositions() throws IOException {    return new MultiTermPositions(subReaders, starts);  }  protected void doCommit() throws IOException {    for (int i = 0; i < subReaders.length; i++)      subReaders[i].commit();  }  protected synchronized void doClose() throws IOException {    for (int i = 0; i < subReaders.length; i++)      subReaders[i].close();  }  /**   * @see IndexReader#getFieldNames(IndexReader.FieldOption)   */  public Collection getFieldNames (IndexReader.FieldOption fieldNames) {    // maintain a unique set of field names    Set fieldSet = new HashSet();    for (int i = 0; i < subReaders.length; i++) {      IndexReader reader = subReaders[i];      Collection names = reader.getFieldNames(fieldNames);      fieldSet.addAll(names);    }    return fieldSet;  }}class MultiTermEnum extends TermEnum {  private SegmentMergeQueue queue;  private Term term;  private int docFreq;  public MultiTermEnum(IndexReader[] readers, int[] starts, Term t)    throws IOException {    queue = new SegmentMergeQueue(readers.length);    for (int i = 0; i < readers.length; i++) {      IndexReader reader = readers[i];      TermEnum termEnum;      if (t != null) {        termEnum = reader.terms(t);      } else        termEnum = reader.terms();      SegmentMergeInfo smi = new SegmentMergeInfo(starts[i], termEnum, reader);      if (t == null ? smi.next() : termEnum.term() != null)        queue.put(smi);          // initialize queue      else        smi.close();    }    if (t != null && queue.size() > 0) {      next();    }  }  public boolean next() throws IOException {    SegmentMergeInfo top = (SegmentMergeInfo)queue.top();    if (top == null) {      term = null;      return false;    }    term = top.term;    docFreq = 0;    while (top != null && term.compareTo(top.term) == 0) {      queue.pop();      docFreq += top.termEnum.docFreq();    // increment freq      if (top.next())        queue.put(top);          // restore queue      else        top.close();          // done with a segment      top = (SegmentMergeInfo)queue.top();    }    return true;  }  public Term term() {    return term;  }  public int docFreq() {    return docFreq;  }  public void close() throws IOException {    queue.close();  }}class MultiTermDocs implements TermDocs {  protected IndexReader[] readers;  protected int[] starts;  protected Term term;  protected int base = 0;  protected int pointer = 0;  private TermDocs[] readerTermDocs;  protected TermDocs current;              // == readerTermDocs[pointer]  public MultiTermDocs(IndexReader[] r, int[] s) {    readers = r;    starts = s;    readerTermDocs = new TermDocs[r.length];  }  public int doc() {    return base + current.doc();  }  public int freq() {    return current.freq();  }  public void seek(Term term) {    this.term = term;    this.base = 0;    this.pointer = 0;    this.current = null;  }  public void seek(TermEnum termEnum) throws IOException {    seek(termEnum.term());  }  public boolean next() throws IOException {    if (current != null && current.next()) {      return true;    } else if (pointer < readers.length) {      base = starts[pointer];      current = termDocs(pointer++);      return next();    } else      return false;  }  /** Optimized implementation. */  public int read(final int[] docs, final int[] freqs) throws IOException {    while (true) {      while (current == null) {        if (pointer < readers.length) {      // try next segment          base = starts[pointer];          current = termDocs(pointer++);        } else {          return 0;        }      }      int end = current.read(docs, freqs);      if (end == 0) {          // none left in segment        current = null;      } else {            // got some        final int b = base;        // adjust doc numbers        for (int i = 0; i < end; i++)         docs[i] += b;        return end;      }    }  }  /** As yet unoptimized implementation. */  public boolean skipTo(int target) throws IOException {    do {      if (!next())        return false;    } while (target > doc());      return true;  }  private TermDocs termDocs(int i) throws IOException {    if (term == null)      return null;    TermDocs result = readerTermDocs[i];    if (result == null)      result = readerTermDocs[i] = termDocs(readers[i]);    result.seek(term);    return result;  }  protected TermDocs termDocs(IndexReader reader)    throws IOException {    return reader.termDocs();  }  public void close() throws IOException {    for (int i = 0; i < readerTermDocs.length; i++) {      if (readerTermDocs[i] != null)        readerTermDocs[i].close();    }  }}class MultiTermPositions extends MultiTermDocs implements TermPositions {  public MultiTermPositions(IndexReader[] r, int[] s) {    super(r,s);  }  protected TermDocs termDocs(IndexReader reader) throws IOException {    return (TermDocs)reader.termPositions();  }  public int nextPosition() throws IOException {    return ((TermPositions)current).nextPosition();  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区不卡在线| 韩国欧美一区二区| 婷婷国产v国产偷v亚洲高清| 美女一区二区久久| 不卡欧美aaaaa| 欧美日本韩国一区二区三区视频 | 欧美福利电影网| 欧美tickling网站挠脚心| 国产欧美中文在线| 亚洲二区在线视频| 国产精品亚洲人在线观看| 99久久er热在这里只有精品15| 欧美裸体一区二区三区| 欧美国产日韩a欧美在线观看 | 欧美日韩中字一区| 久久色在线视频| 亚洲精品综合在线| 国产老女人精品毛片久久| 欧洲在线/亚洲| 久久精品欧美一区二区三区不卡 | 91精品国产91久久久久久一区二区 | av一区二区不卡| 制服丝袜av成人在线看| 国产精品国产三级国产普通话蜜臀 | 国产精品亚洲综合一区在线观看| 一本在线高清不卡dvd| 久久久精品tv| 日韩成人一级片| 91色婷婷久久久久合中文| 日韩精品专区在线影院观看| 91国偷自产一区二区开放时间| 精品三级在线观看| 亚洲一区免费视频| 国产乱码精品一区二区三区av | 日韩中文字幕亚洲一区二区va在线 | 日韩一区二区免费在线观看| 亚洲人快播电影网| 国产麻豆精品久久一二三| 欧美日韩国产天堂| 亚洲最大的成人av| 不卡的av在线| 国产欧美日韩另类视频免费观看| 麻豆视频观看网址久久| 欧美日韩精品免费观看视频| 亚洲日韩欧美一区二区在线| 国产精品自拍一区| 日韩免费电影网站| 日本视频在线一区| 欧美肥胖老妇做爰| 五月天精品一区二区三区| 色www精品视频在线观看| 国产精品蜜臀在线观看| 国产精华液一区二区三区| 精品国产凹凸成av人网站| 日本美女视频一区二区| 91超碰这里只有精品国产| 亚洲国产一区二区在线播放| 日本精品一区二区三区四区的功能| 中文字幕亚洲欧美在线不卡| 高清beeg欧美| 久久久久久久国产精品影院| 国产精品综合一区二区| 久久综合九色综合欧美亚洲| 另类小说视频一区二区| 欧美变态tickle挠乳网站| 蜜桃视频在线一区| 精品国产伦一区二区三区免费| 精品制服美女久久| 欧美成人三级电影在线| 另类小说视频一区二区| 精品国产第一区二区三区观看体验| 久久超碰97中文字幕| 精品国产乱码久久久久久久久| 麻豆中文一区二区| 精品第一国产综合精品aⅴ| 久热成人在线视频| 精品国产3级a| 国产精品资源在线观看| 国产精品你懂的在线欣赏| 不卡一区二区中文字幕| 国产精品久久久久久久久久久免费看| 国产成人av电影免费在线观看| 中文字幕的久久| 色综合天天性综合| 亚洲一区欧美一区| 欧美一卡在线观看| 精东粉嫩av免费一区二区三区| 久久精品亚洲精品国产欧美kt∨| 成人动漫一区二区三区| 亚洲欧洲av一区二区三区久久| 91蜜桃网址入口| 亚洲第一狼人社区| 欧美v亚洲v综合ⅴ国产v| 国产成人欧美日韩在线电影| 成人免费视频在线观看| 欧美系列在线观看| 青青草原综合久久大伊人精品 | 国产精品一品视频| 国产精品久久久一本精品| 91久久精品一区二区| 天天爽夜夜爽夜夜爽精品视频| 日韩欧美你懂的| 成人一级视频在线观看| 一二三区精品视频| 日韩精品一区在线观看| aa级大片欧美| 蜜桃视频一区二区三区| 国产精品美女一区二区在线观看| 欧美吻胸吃奶大尺度电影| 久久99这里只有精品| 国产欧美一区二区精品久导航 | 亚洲国产精品久久久久婷婷884| 日韩一区二区精品在线观看| 成人动漫一区二区三区| 亚洲精品乱码久久久久| 91精品啪在线观看国产60岁| 国产福利一区二区| 一区二区三区四区av| 欧美成人bangbros| 一本色道a无线码一区v| 青娱乐精品视频| 亚洲欧美一区二区三区久本道91| 91麻豆精品国产自产在线观看一区| 国产九色sp调教91| 香蕉影视欧美成人| 国产精品美女久久福利网站 | 久久精品国产成人一区二区三区| 国产精品久久久久久久第一福利| 欧美久久久影院| 成人精品视频网站| 日本免费在线视频不卡一不卡二| 亚洲欧洲国产日韩| 26uuu久久综合| 91国内精品野花午夜精品| 卡一卡二国产精品| 亚洲小说春色综合另类电影| 欧美国产精品一区| 日韩精品一区二区三区swag| 色综合色狠狠综合色| 国产福利91精品一区二区三区| 亚洲一线二线三线视频| 国产人伦精品一区二区| 色偷偷一区二区三区| 国产高清不卡二三区| 美女免费视频一区二区| 亚洲一区二区高清| 综合久久久久久| 国产亚洲一区二区在线观看| 欧美视频一区二区三区四区 | 亚洲色图丝袜美腿| 久久这里都是精品| 日韩一区二区三区在线| 欧美视频在线播放| 色婷婷久久久久swag精品| 国产成人av电影| 国产在线看一区| 久久国产日韩欧美精品| 日韩影院在线观看| 亚洲欧美激情视频在线观看一区二区三区 | 一区二区三区.www| 亚洲欧洲日产国码二区| 国产日韩视频一区二区三区| 精品av综合导航| 日韩丝袜美女视频| 欧美日本视频在线| 精品视频在线视频| 欧美色男人天堂| 91久久一区二区| 在线观看视频一区二区欧美日韩| 成人18精品视频| 成人黄色av电影| 成人aa视频在线观看| www.成人网.com| 99精品一区二区三区| jvid福利写真一区二区三区| 国产老女人精品毛片久久| 国产一区二三区| 国产成人综合自拍| 成人深夜福利app| 暴力调教一区二区三区| 99久久精品免费| 91一区二区在线| 色久综合一二码| 在线观看网站黄不卡| 精品视频资源站| 欧美一区二区在线免费观看| 日韩一级视频免费观看在线| 日韩一区二区三区观看| 精品日韩欧美在线| 久久久不卡影院| 欧美激情一区二区在线| 久久久久久久久蜜桃| 中文字幕欧美三区| 综合激情成人伊人| 一区二区三区四区不卡在线 | 在线免费观看日本欧美| 色婷婷av一区二区三区之一色屋| 在线观看免费亚洲| 91精品福利在线一区二区三区| 久久综合久久鬼色|