Package org.apache.lucene.index
Class SegmentInfos
java.lang.Object
org.apache.lucene.index.SegmentInfos
- All Implemented Interfaces:
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 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 IndexDeletionPolicy
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
Modifier and TypeClassDescriptionstatic class
Utility class for executing code that needs to do something with the current segments file. -
Field Summary
Modifier and TypeFieldDescriptionlong
Used to name new segments.Opaque Map<String, String> that user can specify during IndexWriter.commitlong
Counts how often the index has been changed.static final int
The version that added information about the Lucene version at the time when the index has been created.static final int
The version that updated segment name counter to be long instead of int.static final int
The version that recorded softDelCountstatic final int
The version that recorded SegmentCommitInfo IDs -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
add
(SegmentCommitInfo si) Appends the providedSegmentCommitInfo
.void
addAll
(Iterable<SegmentCommitInfo> sis) Appends the providedSegmentCommitInfo
s.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.clone()
Returns a copy of this instance, also copying each SegmentInfo.final void
Writes and syncs to the Directory dir, taking care to remove the segments file on exceptionfiles
(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.Returns which LuceneVersion
wrote this commit, or null if the version this index was written with did not directly record the version.long
Returns current generation.byte[]
getId()
Since Lucene 5.0, every commit (segments_N) writes a unique id.int
Return the version major that was used to initially create the index.static PrintStream
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
Returns last succesfully read or written generation.Returns the version of the oldest segment, or null if there are no segments.Get the segments_N filename in use by this segment infos.ReturnuserData
saved with this commit.long
version number when this SegmentInfos was generated.info
(int i) ReturnsSegmentCommitInfo
at the provided index.iterator()
Returns an unmodifiableIterator
of contained segments in order.static final SegmentInfos
readCommit
(Directory directory, String segmentFileName) Read a particular segmentFileName.static final SegmentInfos
readCommit
(Directory directory, ChecksumIndexInput input, long generation) Read the commit from the providedChecksumIndexInput
.static final SegmentInfos
readLatestCommit
(Directory directory) Find the latest commit (segments_N file
) and load allSegmentCommitInfo
s.boolean
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.toString()
Returns readable description of this segment.int
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 Details
-
VERSION_70
public static final int VERSION_70The version that added information about the Lucene version at the time when the index has been created.- See Also:
-
VERSION_72
public static final int VERSION_72The version that updated segment name counter to be long instead of int.- See Also:
-
VERSION_74
public static final int VERSION_74The version that recorded softDelCount- See Also:
-
VERSION_86
public static final int VERSION_86The version that recorded SegmentCommitInfo IDs- See Also:
-
counter
public long counterUsed to name new segments. -
version
public long versionCounts how often the index has been changed. -
userData
Opaque Map<String, String> that user can specify during IndexWriter.commit
-
-
Constructor Details
-
SegmentInfos
public SegmentInfos(int indexCreatedVersionMajor) Sole constructor.- Parameters:
indexCreatedVersionMajor
- the Lucene version major at index creation time, or 6 if the index was created before 7.0
-
-
Method Details
-
info
ReturnsSegmentCommitInfo
at the provided index. -
getLastCommitGeneration
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
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
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
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
Get the segments_N filename in use by this segment infos. -
generationFromSegmentsFileName
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
Find the latest commit (segments_N file
) and load allSegmentCommitInfo
s.- Throws:
IOException
-
write
Write ourselves to the providedIndexOutput
- Throws:
IOException
-
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
If non-null, information about retries when loading the segments file will be printed to this. -
getInfoStream
ReturnsinfoStream
.- See Also:
-
updateGeneration
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
Returns all file names referenced by SegmentInfo. The returned collection is recomputed on each invocation.- Throws:
IOException
-
commit
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
Returns readable description of this segment. -
getUserData
ReturnuserData
saved with this commit.- See Also:
-
setUserData
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
Returns an unmodifiableIterator
of contained segments in order.- Specified by:
iterator
in interfaceIterable<SegmentCommitInfo>
-
asList
Returns all contained segments as an unmodifiableList
view. -
size
public int size()Returns number ofSegmentCommitInfo
s. -
add
Appends the providedSegmentCommitInfo
. -
addAll
Appends the providedSegmentCommitInfo
s. -
clear
public void clear()Clear allSegmentCommitInfo
s. -
remove
Remove the providedSegmentCommitInfo
.WARNING: O(N) cost
-
getCommitLuceneVersion
Returns which LuceneVersion
wrote this commit, or null if the version this index was written with did not directly record the 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.
-