Package org.apache.lucene.index
Class SegmentInfos
- java.lang.Object
-
- org.apache.lucene.index.SegmentInfos
-
- All Implemented Interfaces:
Cloneable
,Iterable<SegmentCommitInfo>
public final class SegmentInfos extends Object implements Cloneable, Iterable<SegmentCommitInfo>
A collection of segmentInfo objects with methods for operating on those segments in relation to the file system.The active segments in the index are stored in the segment info file,
segments_N
. There may be one or moresegments_N
files in the index; however, the one with the largest generation is the active one (when older segments_N files are present it's because they temporarily cannot be deleted, or a customIndexDeletionPolicy
is in use). This file lists each segment by name and has details about the codec and generation of deletes.Files:
segments_N
: Header, LuceneVersion, Version, NameCounter, SegCount, MinSegmentLuceneVersion, <SegName, SegID, SegCodec, DelGen, DeletionCount, FieldInfosGen, DocValuesGen, UpdatesFiles>SegCount, CommitUserData, Footer
- Header -->
IndexHeader
- LuceneVersion --> Which Lucene code
Version
was used for this commit, written as threevInt
: major, minor, bugfix - MinSegmentLuceneVersion --> Lucene code
Version
of the oldest segment, written as threevInt
: major, minor, bugfix; this is only written only if there's at least one segment - NameCounter, SegCount, DeletionCount -->
Int32
- Generation, Version, DelGen, Checksum, FieldInfosGen, DocValuesGen -->
Int64
- SegID -->
Int8ID_LENGTH
- SegName, SegCodec -->
String
- CommitUserData -->
Map<String,String>
- UpdatesFiles --> Map<
Int32
,Set<String>
> - Footer -->
CodecFooter
- Version counts how often the index has been changed by adding or deleting documents.
- NameCounter is used to generate names for new segment files.
- SegName is the name of the segment, and is used as the file name prefix for all of the files that compose the segment's index.
- DelGen is the generation count of the deletes file. If this is -1, there are no deletes.
Anything above zero means there are deletes stored by
LiveDocsFormat
. - DeletionCount records the number of deleted documents in this segment.
- SegCodec is the
name
of the Codec that encoded this segment. - SegID is the identifier of the Codec that encoded this segment.
- CommitUserData stores an optional user-supplied opaque Map<String,String> that was
passed to
IndexWriter.setLiveCommitData(Iterable)
. - FieldInfosGen is the generation count of the fieldInfos file. If this is -1, there are no
updates to the fieldInfos in that segment. Anything above zero means there are updates to
fieldInfos stored by
FieldInfosFormat
. - DocValuesGen is the generation count of the updatable DocValues. If this is -1, there are
no updates to DocValues in that segment. Anything above zero means there are updates to
DocValues stored by
DocValuesFormat
. - UpdatesFiles stores the set of files that were updated in that segment per field.
- WARNING: This API is experimental and might change in incompatible ways in the next release.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
SegmentInfos.FindSegmentsFile<T>
Utility class for executing code that needs to do something with the current segments file.
-
Field Summary
Fields Modifier and Type Field Description long
counter
Used to name new segments.Map<String,String>
userData
Opaque Map<String, String> that user can specify during IndexWriter.commitlong
version
Counts how often the index has been changed.static int
VERSION_70
The version that added information about the Lucene version at the time when the index has been created.static int
VERSION_72
The version that updated segment name counter to be long instead of int.static int
VERSION_74
The version that recorded softDelCountstatic int
VERSION_86
The version that recorded SegmentCommitInfo IDs
-
Constructor Summary
Constructors Constructor Description SegmentInfos(int indexCreatedVersionMajor)
Sole constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
add(SegmentCommitInfo si)
Appends the providedSegmentCommitInfo
.void
addAll(Iterable<SegmentCommitInfo> sis)
Appends the providedSegmentCommitInfo
s.List<SegmentCommitInfo>
asList()
Returns all contained segments as an unmodifiableList
view.void
changed()
Call this before committing if changes have been made to the segments.void
clear()
Clear allSegmentCommitInfo
s.SegmentInfos
clone()
Returns a copy of this instance, also copying each SegmentInfo.void
commit(Directory dir)
Writes and syncs to the Directory dir, taking care to remove the segments file on exceptionCollection<String>
files(boolean includeSegmentsFile)
Returns all file names referenced by SegmentInfo.static long
generationFromSegmentsFileName(String fileName)
Parse the generation off the segments file name and return it.Version
getCommitLuceneVersion()
Returns which LuceneVersion
wrote this commit, or null if the version this index was written with did not directly record the version.long
getGeneration()
Returns current generation.byte[]
getId()
Since Lucene 5.0, every commit (segments_N) writes a unique id.int
getIndexCreatedVersionMajor()
Return the version major that was used to initially create the index.static PrintStream
getInfoStream()
ReturnsinfoStream
.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 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 String
getLastCommitSegmentsFileName(String[] files)
Get the filename of the segments_N file for the most recent commit in the list of index files.static String
getLastCommitSegmentsFileName(Directory directory)
Get the filename of the segments_N file for the most recent commit to the index in this Directory.long
getLastGeneration()
Returns last succesfully read or written generation.Version
getMinSegmentLuceneVersion()
Returns the version of the oldest segment, or null if there are no segments.String
getSegmentsFileName()
Get the segments_N filename in use by this segment infos.Map<String,String>
getUserData()
ReturnuserData
saved with this commit.long
getVersion()
version number when this SegmentInfos was generated.SegmentCommitInfo
info(int i)
ReturnsSegmentCommitInfo
at the provided index.Iterator<SegmentCommitInfo>
iterator()
Returns an unmodifiableIterator
of contained segments in order.static SegmentInfos
readCommit(Directory directory, String segmentFileName)
Read a particular segmentFileName.static SegmentInfos
readCommit(Directory directory, ChecksumIndexInput input, long generation)
Read the commit from the providedChecksumIndexInput
.static SegmentInfos
readLatestCommit(Directory directory)
Find the latest commit (segments_N file
) and load allSegmentCommitInfo
s.static SegmentInfos
readLatestCommit(Directory directory, int minSupportedMajorVersion)
Find the latest commit (segments_N file
) and load allSegmentCommitInfo
s, as long as the commit'sgetIndexCreatedVersionMajor()
is strictly greater than the provided minimum supported major version.boolean
remove(SegmentCommitInfo si)
Remove the providedSegmentCommitInfo
.static void
setInfoStream(PrintStream infoStream)
If non-null, information about retries when loading the segments file will be printed to this.void
setNextWriteGeneration(long generation)
Set the generation to be used for the next commitvoid
setUserData(Map<String,String> data, boolean doIncrementVersion)
Sets the commit data.int
size()
Returns number ofSegmentCommitInfo
s.String
toString()
Returns readable description of this segment.int
totalMaxDoc()
Returns sum of all segment's maxDocs.void
updateGeneration(SegmentInfos other)
Carry over generation numbers from another SegmentInfosvoid
write(IndexOutput out)
Write ourselves to the providedIndexOutput
-
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
-
-
-
Field Detail
-
VERSION_70
public static final int VERSION_70
The version that added information about the Lucene version at the time when the index has been created.- See Also:
- Constant Field Values
-
VERSION_72
public static final int VERSION_72
The version that updated segment name counter to be long instead of int.- See Also:
- Constant Field Values
-
VERSION_74
public static final int VERSION_74
The version that recorded softDelCount- See Also:
- Constant Field Values
-
VERSION_86
public static final int VERSION_86
The version that recorded SegmentCommitInfo IDs- See Also:
- Constant Field Values
-
counter
public long counter
Used to name new segments.
-
version
public long version
Counts how often the index has been changed.
-
-
Method Detail
-
info
public SegmentCommitInfo info(int i)
ReturnsSegmentCommitInfo
at the provided index.
-
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)
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
-
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.
-
getId
public byte[] getId()
Since Lucene 5.0, every commit (segments_N) writes a unique id. This will return that id
-
readCommit
public static final SegmentInfos readCommit(Directory directory, String segmentFileName) throws IOException
Read a particular segmentFileName. Note that this may throw an IOException if a commit is in process.- Parameters:
directory
- -- directory containing the segments filesegmentFileName
- -- segment file to load- Throws:
CorruptIndexException
- if the index is corruptIOException
- if there is a low-level IO error
-
readCommit
public static final SegmentInfos readCommit(Directory directory, ChecksumIndexInput input, long generation) throws IOException
Read the commit from the providedChecksumIndexInput
.- Throws:
IOException
-
readLatestCommit
public static final SegmentInfos readLatestCommit(Directory directory) throws IOException
Find the latest commit (segments_N file
) and load allSegmentCommitInfo
s.- Throws:
IOException
-
readLatestCommit
public static final SegmentInfos readLatestCommit(Directory directory, int minSupportedMajorVersion) throws IOException
Find the latest commit (segments_N file
) and load allSegmentCommitInfo
s, as long as the commit'sgetIndexCreatedVersionMajor()
is strictly greater than the provided minimum supported major version. If the commit's version is older, anIndexFormatTooOldException
will be thrown.- Throws:
IOException
-
write
public void write(IndexOutput out) throws IOException
Write ourselves to the providedIndexOutput
- Throws:
IOException
-
clone
public SegmentInfos clone()
Returns a copy of this instance, also copying each SegmentInfo.
-
getVersion
public long getVersion()
version number when this SegmentInfos was generated.
-
getGeneration
public long getGeneration()
Returns current generation.
-
getLastGeneration
public long getLastGeneration()
Returns last succesfully read or written generation.
-
setInfoStream
public static void setInfoStream(PrintStream infoStream)
If non-null, information about retries when loading the segments file will be printed to this.
-
getInfoStream
public static PrintStream getInfoStream()
ReturnsinfoStream
.- See Also:
setInfoStream(java.io.PrintStream)
-
updateGeneration
public void updateGeneration(SegmentInfos other)
Carry over generation numbers from another SegmentInfos- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
setNextWriteGeneration
public void setNextWriteGeneration(long generation)
Set the generation to be used for the next commit
-
files
public Collection<String> files(boolean includeSegmentsFile) throws IOException
Returns all file names referenced by SegmentInfo. The returned collection is recomputed on each invocation.- Throws:
IOException
-
commit
public final void commit(Directory dir) throws IOException
Writes and syncs to the Directory dir, taking care to remove the segments file on exceptionNote:
changed()
should be called prior to this method if changes have been made to thisSegmentInfos
instance- Throws:
IOException
-
toString
public String toString()
Returns readable description of this segment.
-
getUserData
public Map<String,String> getUserData()
ReturnuserData
saved with this commit.- See Also:
IndexWriter.commit()
-
setUserData
public void setUserData(Map<String,String> data, boolean doIncrementVersion)
Sets the commit data.
-
totalMaxDoc
public int totalMaxDoc()
Returns sum of all segment's maxDocs. 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<SegmentCommitInfo> iterator()
Returns an unmodifiableIterator
of contained segments in order.- Specified by:
iterator
in interfaceIterable<SegmentCommitInfo>
-
asList
public List<SegmentCommitInfo> asList()
Returns all contained segments as an unmodifiableList
view.
-
size
public int size()
Returns number ofSegmentCommitInfo
s.
-
add
public void add(SegmentCommitInfo si)
Appends the providedSegmentCommitInfo
.
-
addAll
public void addAll(Iterable<SegmentCommitInfo> sis)
Appends the providedSegmentCommitInfo
s.
-
clear
public void clear()
Clear allSegmentCommitInfo
s.
-
remove
public boolean remove(SegmentCommitInfo si)
Remove the providedSegmentCommitInfo
.WARNING: O(N) cost
-
getCommitLuceneVersion
public Version getCommitLuceneVersion()
Returns which LuceneVersion
wrote this commit, or null if the version this index was written with did not directly record the version.
-
getMinSegmentLuceneVersion
public Version getMinSegmentLuceneVersion()
Returns the version of the oldest segment, or null if there are no segments.
-
getIndexCreatedVersionMajor
public int getIndexCreatedVersionMajor()
Return the version major that was used to initially create the index. This version is set when the index is first created and then never changes. This information was added as of version 7.0 so older indices report 6 as a creation version.
-
-