⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 segmentreader.java

📁 lucene完整源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    for (int i = 0; i < fieldInfos.size(); i++) {      FieldInfo fi = fieldInfos.fieldInfo(i);      if (fi.isIndexed  && !fi.omitNorms){        String name;        if(cfsReader == null)            name = segment + ".f" + i;        else            name = segment + ".s" + i;        if (directory().fileExists(name))            files.addElement(name);      }    }    return files;  }  public TermEnum terms() {    return tis.terms();  }  public TermEnum terms(Term t) throws IOException {    return tis.terms(t);  }  public synchronized Document document(int n) throws IOException {    if (isDeleted(n))      throw new IllegalArgumentException              ("attempt to access a deleted document");    return fieldsReader.doc(n);  }  public synchronized boolean isDeleted(int n) {    return (deletedDocs != null && deletedDocs.get(n));  }  public TermDocs termDocs() throws IOException {    return new SegmentTermDocs(this);  }  public TermPositions termPositions() throws IOException {    return new SegmentTermPositions(this);  }  public int docFreq(Term t) throws IOException {    TermInfo ti = tis.get(t);    if (ti != null)      return ti.docFreq;    else      return 0;  }  public int numDocs() {    int n = maxDoc();    if (deletedDocs != null)      n -= deletedDocs.count();    return n;  }  public int maxDoc() {    return fieldsReader.size();  }  /**   * @see IndexReader#getFieldNames(IndexReader.FieldOption fldOption)   */  public Collection getFieldNames(IndexReader.FieldOption fieldOption) {    Set fieldSet = new HashSet();    for (int i = 0; i < fieldInfos.size(); i++) {      FieldInfo fi = fieldInfos.fieldInfo(i);      if (fieldOption == IndexReader.FieldOption.ALL) {        fieldSet.add(fi.name);      }      else if (!fi.isIndexed && fieldOption == IndexReader.FieldOption.UNINDEXED) {        fieldSet.add(fi.name);      }      else if (fi.isIndexed && fieldOption == IndexReader.FieldOption.INDEXED) {        fieldSet.add(fi.name);      }      else if (fi.isIndexed && fi.storeTermVector == false && fieldOption == IndexReader.FieldOption.INDEXED_NO_TERMVECTOR) {        fieldSet.add(fi.name);      }      else if (fi.storeTermVector == true &&               fi.storePositionWithTermVector == false &&               fi.storeOffsetWithTermVector == false &&               fieldOption == IndexReader.FieldOption.TERMVECTOR) {        fieldSet.add(fi.name);      }      else if (fi.isIndexed && fi.storeTermVector && fieldOption == IndexReader.FieldOption.INDEXED_WITH_TERMVECTOR) {        fieldSet.add(fi.name);      }      else if (fi.storePositionWithTermVector && fi.storeOffsetWithTermVector == false && fieldOption == IndexReader.FieldOption.TERMVECTOR_WITH_POSITION) {        fieldSet.add(fi.name);      }      else if (fi.storeOffsetWithTermVector && fi.storePositionWithTermVector == false && fieldOption == IndexReader.FieldOption.TERMVECTOR_WITH_OFFSET) {        fieldSet.add(fi.name);      }      else if ((fi.storeOffsetWithTermVector && fi.storePositionWithTermVector) &&                fieldOption == IndexReader.FieldOption.TERMVECTOR_WITH_POSITION_OFFSET) {        fieldSet.add(fi.name);      }    }    return fieldSet;  }  public synchronized boolean hasNorms(String field) {    return norms.containsKey(field);  }  static byte[] createFakeNorms(int size) {    byte[] ones = new byte[size];    Arrays.fill(ones, DefaultSimilarity.encodeNorm(1.0f));    return ones;  }  private byte[] ones;  private byte[] fakeNorms() {    if (ones==null) ones=createFakeNorms(maxDoc());    return ones;  }  // can return null if norms aren't stored  protected synchronized byte[] getNorms(String field) throws IOException {    Norm norm = (Norm) norms.get(field);    if (norm == null) return null;  // not indexed, or norms not stored    if (norm.bytes == null) {                     // value not yet read      byte[] bytes = new byte[maxDoc()];      norms(field, bytes, 0);      norm.bytes = bytes;                         // cache it    }    return norm.bytes;  }  // returns fake norms if norms aren't available  public synchronized byte[] norms(String field) throws IOException {    byte[] bytes = getNorms(field);    if (bytes==null) bytes=fakeNorms();    return bytes;  }  protected void doSetNorm(int doc, String field, byte value)          throws IOException {    Norm norm = (Norm) norms.get(field);    if (norm == null)                             // not an indexed field      return;    norm.dirty = true;                            // mark it dirty    normsDirty = true;    norms(field)[doc] = value;                    // set the value  }  /** Read norms into a pre-allocated array. */  public synchronized void norms(String field, byte[] bytes, int offset)    throws IOException {    Norm norm = (Norm) norms.get(field);    if (norm == null) {      System.arraycopy(fakeNorms(), 0, bytes, offset, maxDoc());      return;    }    if (norm.bytes != null) {                     // can copy from cache      System.arraycopy(norm.bytes, 0, bytes, offset, maxDoc());      return;    }    IndexInput normStream = (IndexInput) norm.in.clone();    try {                                         // read from disk      normStream.seek(0);      normStream.readBytes(bytes, offset, maxDoc());    } finally {      normStream.close();    }  }  private void openNorms(Directory cfsDir) throws IOException {    for (int i = 0; i < fieldInfos.size(); i++) {      FieldInfo fi = fieldInfos.fieldInfo(i);      if (fi.isIndexed && !fi.omitNorms) {        // look first if there are separate norms in compound format        String fileName = segment + ".s" + fi.number;        Directory d = directory();        if(!d.fileExists(fileName)){            fileName = segment + ".f" + fi.number;            d = cfsDir;        }        norms.put(fi.name, new Norm(d.openInput(fileName), fi.number));      }    }  }  private void closeNorms() throws IOException {    synchronized (norms) {      Enumeration enumerator = norms.elements();      while (enumerator.hasMoreElements()) {        Norm norm = (Norm) enumerator.nextElement();        norm.in.close();      }    }  }    /**   * Create a clone from the initial TermVectorsReader and store it in the ThreadLocal.   * @return TermVectorsReader   */  private TermVectorsReader getTermVectorsReader() {    TermVectorsReader tvReader = (TermVectorsReader)termVectorsLocal.get();    if (tvReader == null) {      tvReader = (TermVectorsReader)termVectorsReaderOrig.clone();      termVectorsLocal.set(tvReader);    }    return tvReader;  }    /** Return a term frequency vector for the specified document and field. The   *  vector returned contains term numbers and frequencies for all terms in   *  the specified field of this document, if the field had storeTermVector   *  flag set.  If the flag was not set, the method returns null.   * @throws IOException   */  public TermFreqVector getTermFreqVector(int docNumber, String field) throws IOException {    // Check if this field is invalid or has no stored term vector    FieldInfo fi = fieldInfos.fieldInfo(field);    if (fi == null || !fi.storeTermVector || termVectorsReaderOrig == null)       return null;        TermVectorsReader termVectorsReader = getTermVectorsReader();    if (termVectorsReader == null)      return null;        return termVectorsReader.get(docNumber, field);  }  /** 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.   * @throws IOException   */  public TermFreqVector[] getTermFreqVectors(int docNumber) throws IOException {    if (termVectorsReaderOrig == null)      return null;        TermVectorsReader termVectorsReader = getTermVectorsReader();    if (termVectorsReader == null)      return null;        return termVectorsReader.get(docNumber);  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -