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

📄 indexreader.java

📁 索引aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
   *   * @see Field#setBoost(float)   */  public abstract void norms(String field, byte[] bytes, int offset)    throws IOException;  /** Expert: Resets the normalization factor for the named field of the named   * document.  The norm represents the product of the field's {@link   * Field#setBoost(float) boost} and its {@link Similarity#lengthNorm(String,          * int) length normalization}.  Thus, to preserve the length normalization   * values when resetting this, one should base the new value upon the old.   *   * @see #norms(String)   * @see Similarity#decodeNorm(byte)   */  public final synchronized  void setNorm(int doc, String field, byte value)          throws IOException{    if(directoryOwner)      aquireWriteLock();    doSetNorm(doc, field, value);    hasChanges = true;  }            /** Implements setNorm in subclass.*/  protected abstract void doSetNorm(int doc, String field, byte value)           throws IOException;  /** Expert: Resets the normalization factor for the named field of the named   * document.   *   * @see #norms(String)   * @see Similarity#decodeNorm(byte)   */  public void setNorm(int doc, String field, float value)          throws IOException {    setNorm(doc, field, Similarity.encodeNorm(value));  }  /** Returns an enumeration of all the terms in the index.   The enumeration is ordered by Term.compareTo().  Each term   is greater than all that precede it in the enumeration.   */  public abstract TermEnum terms() throws IOException;  /** Returns an enumeration of all terms after a given term.   The enumeration is ordered by Term.compareTo().  Each term   is greater than all that precede it in the enumeration.   */  public abstract TermEnum terms(Term t) throws IOException;  /** Returns the number of documents containing the term <code>t</code>. */  public abstract int docFreq(Term t) throws IOException;  /** Returns an enumeration of all the documents which contain   <code>term</code>. For each document, the document number, the frequency of   the term in that document is also provided, for use in search scoring.   Thus, this method implements the mapping:   <p><ul>   Term &nbsp;&nbsp; =&gt; &nbsp;&nbsp; &lt;docNum, freq&gt;<sup>*</sup>   </ul>   <p>The enumeration is ordered by document number.  Each document number   is greater than all that precede it in the enumeration.   */  public TermDocs termDocs(Term term) throws IOException {    TermDocs termDocs = termDocs();    termDocs.seek(term);    return termDocs;  }  /** Returns an unpositioned {@link TermDocs} enumerator. */  public abstract TermDocs termDocs() throws IOException;  /** Returns an enumeration of all the documents which contain   <code>term</code>.  For each document, in addition to the document number   and frequency of the term in that document, a list of all of the ordinal   positions of the term in the document is available.  Thus, this method   implements the mapping:   <p><ul>   Term &nbsp;&nbsp; =&gt; &nbsp;&nbsp; &lt;docNum, freq,   &lt;pos<sub>1</sub>, pos<sub>2</sub>, ...   pos<sub>freq-1</sub>&gt;   &gt;<sup>*</sup>   </ul>   <p> This positional information faciliates phrase and proximity searching.   <p>The enumeration is ordered by document number.  Each document number is   greater than all that precede it in the enumeration.   */  public TermPositions termPositions(Term term) throws IOException {    TermPositions termPositions = termPositions();    termPositions.seek(term);    return termPositions;  }  /** Returns an unpositioned {@link TermPositions} enumerator. */  public abstract TermPositions termPositions() throws IOException;  /**   * Trys to acquire the WriteLock on this directory.   * this method is only valid if this IndexReader is directory owner.   *    * @throws IOException If WriteLock cannot be acquired.   */  private void aquireWriteLock() throws IOException {    if (stale)      throw new IOException("IndexReader out of date and no longer valid for delete, undelete, or setNorm operations");    if (writeLock == null) {      Lock writeLock = directory.makeLock(IndexWriter.WRITE_LOCK_NAME);      if (!writeLock.obtain(IndexWriter.WRITE_LOCK_TIMEOUT)) // obtain write lock        throw new IOException("Index locked for write: " + writeLock);      this.writeLock = writeLock;      // we have to check whether index has changed since this reader was opened.      // if so, this reader is no longer valid for deletion      if (SegmentInfos.readCurrentVersion(directory) > segmentInfos.getVersion()) {        stale = true;        this.writeLock.release();        this.writeLock = null;        throw new IOException("IndexReader out of date and no longer valid for delete, undelete, or setNorm operations");      }    }  }    /** Deletes the document numbered <code>docNum</code>.  Once a document is   deleted it will not appear in TermDocs or TermPostitions enumerations.   Attempts to read its field with the {@link #document}   method will result in an error.  The presence of this document may still be   reflected in the {@link #docFreq} statistic, though   this will be corrected eventually as the index is further modified.   */  public final synchronized void delete(int docNum) throws IOException {    if(directoryOwner)      aquireWriteLock();    doDelete(docNum);    hasChanges = true;  }  /** Implements deletion of the document numbered <code>docNum</code>.   * Applications should call {@link #delete(int)} or {@link #delete(Term)}.   */  protected abstract void doDelete(int docNum) throws IOException;  /** Deletes all documents containing <code>term</code>.   This is useful if one uses a document field to hold a unique ID string for   the document.  Then to delete such a document, one merely constructs a   term with the appropriate field and the unique ID string as its text and   passes it to this method.  Returns the number of documents deleted.   */  public final int delete(Term term) throws IOException {    TermDocs docs = termDocs(term);    if (docs == null) return 0;    int n = 0;    try {      while (docs.next()) {        delete(docs.doc());        n++;      }    } finally {      docs.close();    }    return n;  }  /** Undeletes all documents currently marked as deleted in this index.*/  public final synchronized void undeleteAll() throws IOException{    if(directoryOwner)      aquireWriteLock();    doUndeleteAll();    hasChanges = true;  }    /** Implements actual undeleteAll() in subclass. */  protected abstract void doUndeleteAll() throws IOException;  /**   * Commit changes resulting from delete, undeleteAll, or setNorm operations   *    * @throws IOException   */  protected final synchronized void commit() throws IOException{    if(hasChanges){      if(directoryOwner){        synchronized (directory) {      // in- & inter-process sync           new Lock.With(directory.makeLock(IndexWriter.COMMIT_LOCK_NAME),                   IndexWriter.COMMIT_LOCK_TIMEOUT) {             public Object doBody() throws IOException {               doCommit();               segmentInfos.write(directory);               return null;             }           }.run();         }        if (writeLock != null) {          writeLock.release();  // release write lock          writeLock = null;        }      }      else        doCommit();    }    hasChanges = false;  }    /** Implements commit. */  protected abstract void doCommit() throws IOException;    /**   * Closes files associated with this index.   * Also saves any new deletions to disk.   * No other methods should be called after this has been called.   */  public final synchronized void close() throws IOException {    commit();    doClose();    if(closeDirectory)      directory.close();  }  /** Implements close. */  protected abstract void doClose() throws IOException;  /** Release the write lock, if needed. */  protected final void finalize() throws IOException {    if (writeLock != null) {      writeLock.release();                        // release write lock      writeLock = null;    }  }    /**   * Returns a list of all unique field names that exist in the index pointed   * to by this IndexReader.   * @return Collection of Strings indicating the names of the fields   * @throws IOException if there is a problem with accessing the index   */  public abstract Collection getFieldNames() throws IOException;  /**   * Returns a list of all unique field names that exist in the index pointed   * to by this IndexReader.  The boolean argument specifies whether the fields   * returned are indexed or not.   * @param indexed <code>true</code> if only indexed fields should be returned;   *                <code>false</code> if only unindexed fields should be returned.   * @return Collection of Strings indicating the names of the fields   * @throws IOException if there is a problem with accessing the index   */  public abstract Collection getFieldNames(boolean indexed) throws IOException;  /**   *    * @param storedTermVector if true, returns only Indexed fields that have term vector info,    *                        else only indexed fields without term vector info    * @return Collection of Strings indicating the names of the fields   */   public abstract Collection getIndexedFieldNames(boolean storedTermVector);  /**   * Returns <code>true</code> iff the index in the named directory is   * currently locked.   * @param directory the directory to check for a lock   * @throws IOException if there is a problem with accessing the index   */  public static boolean isLocked(Directory directory) throws IOException {    return            directory.makeLock(IndexWriter.WRITE_LOCK_NAME).isLocked() ||            directory.makeLock(IndexWriter.COMMIT_LOCK_NAME).isLocked();  }  /**   * Returns <code>true</code> iff the index in the named directory is   * currently locked.   * @param directory the directory to check for a lock   * @throws IOException if there is a problem with accessing the index   */  public static boolean isLocked(String directory) throws IOException {    Directory dir = FSDirectory.getDirectory(directory, false);    boolean result = isLocked(dir);    dir.close();    return result;  }  /**   * Forcibly unlocks the index in the named directory.   * <P>   * Caution: this should only be used by failure recovery code,   * when it is known that no other process nor thread is in fact   * currently accessing this index.   */  public static void unlock(Directory directory) throws IOException {    directory.makeLock(IndexWriter.WRITE_LOCK_NAME).release();    directory.makeLock(IndexWriter.COMMIT_LOCK_NAME).release();  }}

⌨️ 快捷键说明

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