Class SegmentInfos
- java.lang.Object
-
- org.apache.lucene.index.SegmentInfos
-
- All Implemented Interfaces:
java.lang.Cloneable,java.lang.Iterable<SegmentCommitInfo>
public final class SegmentInfos extends java.lang.Object implements java.lang.Cloneable, java.lang.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 more segments_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 custom
IndexDeletionPolicyis 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
Versionwas used for this commit, written as threevInt: major, minor, bugfix - MinSegmentLuceneVersion --> Lucene code
Versionof 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
nameof 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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classSegmentInfos.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 longcounterUsed to name new segments.private longgenerationprivate byte[]idId for this commit; only written starting with Lucene 5.0private intindexCreatedVersionMajorThe Lucene version major that was used to create the index.private static java.io.PrintStreaminfoStreamIf non-null, information about loading segments_N files will be printed here.private longlastGenerationprivate VersionluceneVersionWhich Lucene version wrote this commit.private VersionminSegmentLuceneVersionVersion of the oldest segment in the index, or null if there are no segments.(package private) booleanpendingCommitprivate java.util.List<SegmentCommitInfo>segmentsjava.util.Map<java.lang.String,java.lang.String>userDataOpaque Map<String, String> that user can specify during IndexWriter.commitlongversionCounts how often the index has been changed.static intVERSION_70The version that added information about the Lucene version at the time when the index has been created.static intVERSION_72The version that updated segment name counter to be long instead of int.static intVERSION_74The version that recorded softDelCountstatic intVERSION_86The version that recorded SegmentCommitInfo IDs(package private) static intVERSION_CURRENT
-
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 voidadd(SegmentCommitInfo si)Appends the providedSegmentCommitInfo.voidaddAll(java.lang.Iterable<SegmentCommitInfo> sis)Appends the providedSegmentCommitInfos.(package private) voidapplyMergeChanges(MergePolicy.OneMerge merge, boolean dropSegment)applies all changes caused by committing a merge to this SegmentInfosjava.util.List<SegmentCommitInfo>asList()Returns all contained segments as an unmodifiableListview.voidchanged()Call this before committing if changes have been made to the segments.voidclear()Clear allSegmentCommitInfos.SegmentInfosclone()Returns a copy of this instance, also copying each SegmentInfo.voidcommit(Directory dir)Writes and syncs to the Directory dir, taking care to remove the segments file on exception(package private) booleancontains(SegmentCommitInfo si)Return true if the providedSegmentCommitInfois contained.(package private) java.util.List<SegmentCommitInfo>createBackupSegmentInfos()java.util.Collection<java.lang.String>files(boolean includeSegmentsFile)Returns all file names referenced by SegmentInfo.(package private) java.lang.StringfinishCommit(Directory dir)Returns the committed segments_N filename.static longgenerationFromSegmentsFileName(java.lang.String fileName)Parse the generation off the segments file name and return it.VersiongetCommitLuceneVersion()Returns which LuceneVersionwrote this commit, or null if the version this index was written with did not directly record the version.longgetGeneration()Returns current generation.byte[]getId()Since Lucene 5.0, every commit (segments_N) writes a unique id.intgetIndexCreatedVersionMajor()Return the version major that was used to initially create the index.static java.io.PrintStreamgetInfoStream()ReturnsinfoStream.static longgetLastCommitGeneration(java.lang.String[] files)Get the generation of the most recent commit to the list of index files (N in the segments_N file).static longgetLastCommitGeneration(Directory directory)Get the generation of the most recent commit to the index in this directory (N in the segments_N file).static java.lang.StringgetLastCommitSegmentsFileName(java.lang.String[] files)Get the filename of the segments_N file for the most recent commit in the list of index files.static java.lang.StringgetLastCommitSegmentsFileName(Directory directory)Get the filename of the segments_N file for the most recent commit to the index in this Directory.longgetLastGeneration()Returns last succesfully read or written generation.VersiongetMinSegmentLuceneVersion()Returns the version of the oldest segment, or null if there are no segments.private longgetNextPendingGeneration()return generation of the next pending_segments_N that will be writtenjava.lang.StringgetSegmentsFileName()Get the segments_N filename in use by this segment infos.java.util.Map<java.lang.String,java.lang.String>getUserData()ReturnuserDatasaved with this commit.longgetVersion()version number when this SegmentInfos was generated.(package private) intindexOf(SegmentCommitInfo si)Returns index of the providedSegmentCommitInfo.SegmentCommitInfoinfo(int i)ReturnsSegmentCommitInfoat the provided index.java.util.Iterator<SegmentCommitInfo>iterator()Returns an unmodifiableIteratorof contained segments in order.private static voidmessage(java.lang.String message)Prints the given message to the infoStream.(package private) voidprepareCommit(Directory dir)Call this to start a commit.private static CodecreadCodec(DataInput input)static SegmentInfosreadCommit(Directory directory, java.lang.String segmentFileName)Read a particular segmentFileName.static SegmentInfosreadCommit(Directory directory, ChecksumIndexInput input, long generation)Read the commit from the providedChecksumIndexInput.static SegmentInfosreadLatestCommit(Directory directory)Find the latest commit (segments_N file) and load allSegmentCommitInfos.(package private) voidremove(int index)Remove theSegmentCommitInfoat the provided index.booleanremove(SegmentCommitInfo si)Remove the providedSegmentCommitInfo.(package private) voidreplace(SegmentInfos other)Replaces all segments in this instance, but keeps generation, version, counter so that future commits remain write once.(package private) voidrollbackCommit(Directory dir)(package private) voidrollbackSegmentInfos(java.util.List<SegmentCommitInfo> infos)static voidsetInfoStream(java.io.PrintStream infoStream)If non-null, information about retries when loading the segments file will be printed to this.voidsetNextWriteGeneration(long generation)Set the generation to be used for the next commitvoidsetUserData(java.util.Map<java.lang.String,java.lang.String> data, boolean doIncrementVersion)Sets the commit data.(package private) voidsetVersion(long newVersion)intsize()Returns number ofSegmentCommitInfos.java.lang.StringtoString()Returns readable description of this segment.inttotalMaxDoc()Returns sum of all segment's maxDocs.voidupdateGeneration(SegmentInfos other)Carry over generation numbers from another SegmentInfos(package private) voidupdateGenerationVersionAndCounter(SegmentInfos other)private voidwrite(Directory directory)voidwrite(IndexOutput out)Write ourselves to the providedIndexOutput
-
-
-
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
-
VERSION_CURRENT
static final int VERSION_CURRENT
- 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.
-
generation
private long generation
-
lastGeneration
private long lastGeneration
-
userData
public java.util.Map<java.lang.String,java.lang.String> userData
Opaque Map<String, String> that user can specify during IndexWriter.commit
-
segments
private java.util.List<SegmentCommitInfo> segments
-
infoStream
private static java.io.PrintStream infoStream
If non-null, information about loading segments_N files will be printed here. @see #setInfoStream.
-
id
private byte[] id
Id for this commit; only written starting with Lucene 5.0
-
luceneVersion
private Version luceneVersion
Which Lucene version wrote this commit.
-
minSegmentLuceneVersion
private Version minSegmentLuceneVersion
Version of the oldest segment in the index, or null if there are no segments.
-
indexCreatedVersionMajor
private final int indexCreatedVersionMajor
The Lucene version major that was used to create the index.
-
pendingCommit
boolean pendingCommit
-
-
Method Detail
-
info
public SegmentCommitInfo info(int i)
ReturnsSegmentCommitInfoat the provided index.
-
getLastCommitGeneration
public static long getLastCommitGeneration(java.lang.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 java.io.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:
java.io.IOException
-
getLastCommitSegmentsFileName
public static java.lang.String getLastCommitSegmentsFileName(java.lang.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 java.lang.String getLastCommitSegmentsFileName(Directory directory) throws java.io.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:
java.io.IOException
-
getSegmentsFileName
public java.lang.String getSegmentsFileName()
Get the segments_N filename in use by this segment infos.
-
generationFromSegmentsFileName
public static long generationFromSegmentsFileName(java.lang.String fileName)
Parse the generation off the segments file name and return it.
-
getNextPendingGeneration
private long getNextPendingGeneration()
return generation of the next pending_segments_N that will be written
-
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, java.lang.String segmentFileName) throws java.io.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 corruptjava.io.IOException- if there is a low-level IO error
-
readCommit
public static final SegmentInfos readCommit(Directory directory, ChecksumIndexInput input, long generation) throws java.io.IOException
Read the commit from the providedChecksumIndexInput.- Throws:
java.io.IOException
-
readCodec
private static Codec readCodec(DataInput input) throws java.io.IOException
- Throws:
java.io.IOException
-
readLatestCommit
public static final SegmentInfos readLatestCommit(Directory directory) throws java.io.IOException
Find the latest commit (segments_N file) and load allSegmentCommitInfos.- Throws:
java.io.IOException
-
write
private void write(Directory directory) throws java.io.IOException
- Throws:
java.io.IOException
-
write
public void write(IndexOutput out) throws java.io.IOException
Write ourselves to the providedIndexOutput- Throws:
java.io.IOException
-
clone
public SegmentInfos clone()
Returns a copy of this instance, also copying each SegmentInfo.- Overrides:
clonein classjava.lang.Object
-
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(java.io.PrintStream infoStream)
If non-null, information about retries when loading the segments file will be printed to this.
-
getInfoStream
public static java.io.PrintStream getInfoStream()
ReturnsinfoStream.- See Also:
setInfoStream(java.io.PrintStream)
-
message
private static void message(java.lang.String message)
Prints the given message to the infoStream. Note, this method does not check for null infoStream. It assumes this check has been performed by the caller, which is recommended to avoid the (usually) expensive message creation.
-
updateGeneration
public void updateGeneration(SegmentInfos other)
Carry over generation numbers from another SegmentInfos
-
updateGenerationVersionAndCounter
void updateGenerationVersionAndCounter(SegmentInfos other)
-
setNextWriteGeneration
public void setNextWriteGeneration(long generation)
Set the generation to be used for the next commit
-
rollbackCommit
final void rollbackCommit(Directory dir)
-
prepareCommit
final void prepareCommit(Directory dir) throws java.io.IOException
Call this to start a commit. This writes the new segments file, but writes an invalid checksum at the end, so that it is not visible to readers. Once this is called you must callfinishCommit(org.apache.lucene.store.Directory)to complete the commit orrollbackCommit(org.apache.lucene.store.Directory)to abort it.Note:
changed()should be called prior to this method if changes have been made to thisSegmentInfosinstance- Throws:
java.io.IOException
-
files
public java.util.Collection<java.lang.String> files(boolean includeSegmentsFile) throws java.io.IOExceptionReturns all file names referenced by SegmentInfo. The returned collection is recomputed on each invocation.- Throws:
java.io.IOException
-
finishCommit
final java.lang.String finishCommit(Directory dir) throws java.io.IOException
Returns the committed segments_N filename.- Throws:
java.io.IOException
-
commit
public final void commit(Directory dir) throws java.io.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 thisSegmentInfosinstance- Throws:
java.io.IOException
-
toString
public java.lang.String toString()
Returns readable description of this segment.- Overrides:
toStringin classjava.lang.Object
-
getUserData
public java.util.Map<java.lang.String,java.lang.String> getUserData()
ReturnuserDatasaved with this commit.- See Also:
IndexWriter.commit()
-
setUserData
public void setUserData(java.util.Map<java.lang.String,java.lang.String> data, boolean doIncrementVersion)Sets the commit data.
-
replace
void replace(SegmentInfos other)
Replaces all segments in this instance, but keeps generation, version, counter so that future commits remain write once.
-
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.
-
setVersion
void setVersion(long newVersion)
-
applyMergeChanges
void applyMergeChanges(MergePolicy.OneMerge merge, boolean dropSegment)
applies all changes caused by committing a merge to this SegmentInfos
-
createBackupSegmentInfos
java.util.List<SegmentCommitInfo> createBackupSegmentInfos()
-
rollbackSegmentInfos
void rollbackSegmentInfos(java.util.List<SegmentCommitInfo> infos)
-
iterator
public java.util.Iterator<SegmentCommitInfo> iterator()
Returns an unmodifiableIteratorof contained segments in order.- Specified by:
iteratorin interfacejava.lang.Iterable<SegmentCommitInfo>
-
asList
public java.util.List<SegmentCommitInfo> asList()
Returns all contained segments as an unmodifiableListview.
-
size
public int size()
Returns number ofSegmentCommitInfos.
-
add
public void add(SegmentCommitInfo si)
Appends the providedSegmentCommitInfo.
-
addAll
public void addAll(java.lang.Iterable<SegmentCommitInfo> sis)
Appends the providedSegmentCommitInfos.
-
clear
public void clear()
Clear allSegmentCommitInfos.
-
remove
public boolean remove(SegmentCommitInfo si)
Remove the providedSegmentCommitInfo.WARNING: O(N) cost
-
remove
void remove(int index)
Remove theSegmentCommitInfoat the provided index.WARNING: O(N) cost
-
contains
boolean contains(SegmentCommitInfo si)
Return true if the providedSegmentCommitInfois contained.WARNING: O(N) cost
-
indexOf
int indexOf(SegmentCommitInfo si)
Returns index of the providedSegmentCommitInfo.WARNING: O(N) cost
-
getCommitLuceneVersion
public Version getCommitLuceneVersion()
Returns which LuceneVersionwrote 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.
-
-