org.apache.lucene.index
Class SegmentInfos

java.lang.Object
  extended by org.apache.lucene.index.SegmentInfos
All Implemented Interfaces:
Cloneable, Iterable<SegmentInfo>

public final class SegmentInfos
extends Object
implements Cloneable, Iterable<SegmentInfo>

A collection of segmentInfo objects with methods for operating on those segments in relation to the file system.

WARNING: This API is experimental and might change in incompatible ways in the next release.

Nested Class Summary
static class SegmentInfos.FindSegmentsFile
          Utility class for executing code that needs to do something with the current segments file.
 
Field Summary
 int counter
           
static int CURRENT_FORMAT
           
static int FORMAT
          The file format version, a negative number.
static int FORMAT_3_1
          Each segment records the Lucene version that created it.
static int FORMAT_CHECKSUM
          This format adds a checksum at the end of the file to ensure all bytes were successfully written.
static int FORMAT_DEL_COUNT
          This format adds the deletion count for each segment.
static int FORMAT_DIAGNOSTICS
          This format adds optional per-segment String diagnostics storage, and switches userData to Map
static int FORMAT_HAS_PROX
          This format adds the boolean hasProx to record if any fields in the segment store prox information (ie, have omitTermFreqAndPositions==false)
static int FORMAT_HAS_VECTORS
          Each segment records whether it has term vectors
static int FORMAT_LOCKLESS
          This format adds details used for lockless commits.
static int FORMAT_MAXIMUM
           
static int FORMAT_MINIMUM
           
static int FORMAT_SHARED_DOC_STORE
          This format allows multiple segments to share a single vectors and stored fields file.
static int FORMAT_SINGLE_NORM_FILE
          This format adds a "hasSingleNormFile" flag into each segment info.
static int FORMAT_USER_DATA
          This format adds optional commit userData (String) storage.
 
Constructor Summary
SegmentInfos()
           
 
Method Summary
 void add(SegmentInfo si)
           
 void addAll(Iterable<SegmentInfo> sis)
           
 List<SegmentInfo> asList()
          Returns all contained segments as an unmodifiable List view.
 Set<SegmentInfo> asSet()
          Returns all contained segments as an unmodifiable Set view.
 void changed()
          Call this before committing if changes have been made to the segments.
 void clear()
           
 Object clone()
          Returns a copy of this instance, also copying each SegmentInfo.
 boolean contains(SegmentInfo si)
           
 Collection<String> files(Directory dir, boolean includeSegmentsFile)
          Returns all file names referenced by SegmentInfo instances matching the provided Directory (ie files associated with any "external" segments are skipped).
static long generationFromSegmentsFileName(String fileName)
          Parse the generation off the segments file name and return it.
static int getDefaultGenLookahedCount()
           
 int getFormat()
           
 long getGeneration()
           
static PrintStream getInfoStream()
           
static long getLastCommitGeneration(Directory directory)
          Get the generation of the most recent commit to the index in this directory (N in the segments_N file).
static long getLastCommitGeneration(String[] files)
          Get the generation of the most recent commit to the list of index files (N in the segments_N file).
static String getLastCommitSegmentsFileName(Directory directory)
          Get the filename of the segments_N file for the most recent commit to the index in this Directory.
static String getLastCommitSegmentsFileName(String[] files)
          Get the filename of the segments_N file for the most recent commit in the list of index files.
 long getLastGeneration()
           
 String getNextSegmentFileName()
          Get the next segments_N filename that will be written.
 String getSegmentsFileName()
          Get the segments_N filename in use by this segment infos.
 Map<String,String> getUserData()
           
 long getVersion()
          version number when this SegmentInfos was generated.
 int indexOf(SegmentInfo si)
           
 SegmentInfo info(int i)
           
 Iterator<SegmentInfo> iterator()
          Returns an unmodifiable Iterator of contained segments in order.
 void pruneDeletedSegments()
          Prunes any segment whose docs are all deleted.
 SegmentInfos range(int first, int last)
          Deprecated. use asList().subList(first, last) instead.
 void read(Directory directory)
          This version of read uses the retry logic (for lock-less commits) to find the right segments file to load.
 void read(Directory directory, String segmentFileName)
          Read a particular segmentFileName.
static long readCurrentVersion(Directory directory)
          Deprecated. Load the SegmentInfos and then call getVersion().
 void remove(int index)
           
 void remove(SegmentInfo si)
           
static void setDefaultGenLookaheadCount(int count)
          Advanced: set how many times to try incrementing the gen when loading the segments file.
 void setFormat(int format)
           
static void setInfoStream(PrintStream infoStream)
          If non-null, information about retries when loading the segments file will be printed to this.
 int size()
           
 String toString(Directory directory)
           
 int totalDocCount()
          Returns sum of all segment's docCounts.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

FORMAT

public static final int FORMAT
The file format version, a negative number.

See Also:
Constant Field Values

FORMAT_LOCKLESS

public static final int FORMAT_LOCKLESS
This format adds details used for lockless commits. It differs slightly from the previous format in that file names are never re-used (write once). Instead, each file is written to the next generation. For example, segments_1, segments_2, etc. This allows us to not use a commit lock. See file formats for details.

See Also:
Constant Field Values

FORMAT_SINGLE_NORM_FILE

public static final int FORMAT_SINGLE_NORM_FILE
This format adds a "hasSingleNormFile" flag into each segment info. See LUCENE-756 for details.

See Also:
Constant Field Values

FORMAT_SHARED_DOC_STORE

public static final int FORMAT_SHARED_DOC_STORE
This format allows multiple segments to share a single vectors and stored fields file.

See Also:
Constant Field Values

FORMAT_CHECKSUM

public static final int FORMAT_CHECKSUM
This format adds a checksum at the end of the file to ensure all bytes were successfully written.

See Also:
Constant Field Values

FORMAT_DEL_COUNT

public static final int FORMAT_DEL_COUNT
This format adds the deletion count for each segment. This way IndexWriter can efficiently report numDocs().

See Also:
Constant Field Values

FORMAT_HAS_PROX

public static final int FORMAT_HAS_PROX
This format adds the boolean hasProx to record if any fields in the segment store prox information (ie, have omitTermFreqAndPositions==false)

See Also:
Constant Field Values

FORMAT_USER_DATA

public static final int FORMAT_USER_DATA
This format adds optional commit userData (String) storage.

See Also:
Constant Field Values

FORMAT_DIAGNOSTICS

public static final int FORMAT_DIAGNOSTICS
This format adds optional per-segment String diagnostics storage, and switches userData to Map

See Also:
Constant Field Values

FORMAT_HAS_VECTORS

public static final int FORMAT_HAS_VECTORS
Each segment records whether it has term vectors

See Also:
Constant Field Values

FORMAT_3_1

public static final int FORMAT_3_1
Each segment records the Lucene version that created it.

See Also:
Constant Field Values

CURRENT_FORMAT

public static final int CURRENT_FORMAT
See Also:
Constant Field Values

FORMAT_MINIMUM

public static final int FORMAT_MINIMUM
See Also:
Constant Field Values

FORMAT_MAXIMUM

public static final int FORMAT_MAXIMUM
See Also:
Constant Field Values

counter

public int counter
Constructor Detail

SegmentInfos

public SegmentInfos()
Method Detail

setFormat

public void setFormat(int format)

getFormat

public int getFormat()

info

public SegmentInfo info(int i)

getLastCommitGeneration

public static long getLastCommitGeneration(String[] files)
Get the generation of the most recent commit to the list of index files (N in the segments_N file).

Parameters:
files - -- array of file names to check

getLastCommitGeneration

public static long getLastCommitGeneration(Directory directory)
                                    throws IOException
Get the generation of the most recent commit to the index in this directory (N in the segments_N file).

Parameters:
directory - -- directory to search for the latest segments_N file
Throws:
IOException

getLastCommitSegmentsFileName

public static String getLastCommitSegmentsFileName(String[] files)
                                            throws IOException
Get the filename of the segments_N file for the most recent commit in the list of index files.

Parameters:
files - -- array of file names to check
Throws:
IOException

getLastCommitSegmentsFileName

public static String getLastCommitSegmentsFileName(Directory directory)
                                            throws IOException
Get the filename of the segments_N file for the most recent commit to the index in this Directory.

Parameters:
directory - -- directory to search for the latest segments_N file
Throws:
IOException

getSegmentsFileName

public String getSegmentsFileName()
Get the segments_N filename in use by this segment infos.


generationFromSegmentsFileName

public static long generationFromSegmentsFileName(String fileName)
Parse the generation off the segments file name and return it.


getNextSegmentFileName

public String getNextSegmentFileName()
Get the next segments_N filename that will be written.


read

public final void read(Directory directory,
                       String segmentFileName)
                throws CorruptIndexException,
                       IOException
Read a particular segmentFileName. Note that this may throw an IOException if a commit is in process.

Parameters:
directory - -- directory containing the segments file
segmentFileName - -- segment file to load
Throws:
CorruptIndexException - if the index is corrupt
IOException - if there is a low-level IO error

read

public final void read(Directory directory)
                throws CorruptIndexException,
                       IOException
This version of read uses the retry logic (for lock-less commits) to find the right segments file to load.

Throws:
CorruptIndexException - if the index is corrupt
IOException - if there is a low-level IO error

pruneDeletedSegments

public void pruneDeletedSegments()
                          throws IOException
Prunes any segment whose docs are all deleted.

Throws:
IOException

clone

public Object clone()
Returns a copy of this instance, also copying each SegmentInfo.

Overrides:
clone in class Object

getVersion

public long getVersion()
version number when this SegmentInfos was generated.


getGeneration

public long getGeneration()

getLastGeneration

public long getLastGeneration()

readCurrentVersion

@Deprecated
public static long readCurrentVersion(Directory directory)
                               throws CorruptIndexException,
                                      IOException
Deprecated. Load the SegmentInfos and then call getVersion().

Current version number from segments file.

Throws:
CorruptIndexException - if the index is corrupt
IOException - if there is a low-level IO error

setInfoStream

public static void setInfoStream(PrintStream infoStream)
If non-null, information about retries when loading the segments file will be printed to this.


setDefaultGenLookaheadCount

public static void setDefaultGenLookaheadCount(int count)
Advanced: set how many times to try incrementing the gen when loading the segments file. This only runs if the primary (listing directory) and secondary (opening segments.gen file) methods fail to find the segments file.

WARNING: This API is experimental and might change in incompatible ways in the next release.

getDefaultGenLookahedCount

public static int getDefaultGenLookahedCount()
See Also:
setDefaultGenLookaheadCount(int)
WARNING: This API is experimental and might change in incompatible ways in the next release.

getInfoStream

public static PrintStream getInfoStream()
See Also:
setInfoStream(java.io.PrintStream)

range

@Deprecated
public SegmentInfos range(int first,
                                     int last)
Deprecated. use asList().subList(first, last) instead.

Returns a new SegmentInfos containing the SegmentInfo instances in the specified range first (inclusive) to last (exclusive), so total number of segments returned is last-first.


files

public Collection<String> files(Directory dir,
                                boolean includeSegmentsFile)
                         throws IOException
Returns all file names referenced by SegmentInfo instances matching the provided Directory (ie files associated with any "external" segments are skipped). The returned collection is recomputed on each invocation.

Throws:
IOException

toString

public String toString(Directory directory)

getUserData

public Map<String,String> getUserData()

totalDocCount

public int totalDocCount()
Returns sum of all segment's docCounts. Note that this does not include deletions


changed

public void changed()
Call this before committing if changes have been made to the segments.


iterator

public Iterator<SegmentInfo> iterator()
Returns an unmodifiable Iterator of contained segments in order.

Specified by:
iterator in interface Iterable<SegmentInfo>

asList

public List<SegmentInfo> asList()
Returns all contained segments as an unmodifiable List view.


asSet

public Set<SegmentInfo> asSet()
Returns all contained segments as an unmodifiable Set view. The iterator is not sorted, use List view or iterator() to get all segments in order.


size

public int size()

add

public void add(SegmentInfo si)

addAll

public void addAll(Iterable<SegmentInfo> sis)

clear

public void clear()

remove

public void remove(SegmentInfo si)

remove

public void remove(int index)

contains

public boolean contains(SegmentInfo si)

indexOf

public int indexOf(SegmentInfo si)