public final class SegmentInfos extends java.lang.Object implements java.lang.Cloneable, java.lang.Iterable<SegmentCommitInfo>
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 writer is in the process of committing, or a custom
IndexDeletionPolicy
is in use). This file lists each segment by name and has details about the
codec and generation of deletes.
There is also a file segments.gen. This file contains
the current generation (the _N in segments_N) of the index.
This is used only as a fallback in case the current generation cannot be
accurately determined by directory listing alone (as is the case for some NFS
clients with time-based directory cache expiration). This file simply contains
an Int32 version header
(FORMAT_SEGMENTS_GEN_CURRENT), followed by the
generation recorded as Int64, written twice.
Files:
CodecHeaderInt32Int64StringMap<String,String>Set<String>
LiveDocsFormat.name of the Codec that encoded
this segment.IndexWriter.setCommitData(java.util.Map).FieldInfosFormat.| Modifier and Type | Class and Description |
|---|---|
static class |
SegmentInfos.FindSegmentsFile
Utility class for executing code that needs to do
something with the current segments file.
|
| Modifier and Type | Field and Description |
|---|---|
int |
counter
Used to name new segments.
|
static int |
FORMAT_SEGMENTS_GEN_CURRENT
Used for the segments.gen file only!
Whenever you add a new format, make it 1 smaller (negative version logic)!
|
java.util.Map<java.lang.String,java.lang.String> |
userData
Opaque Map<String, String> that user can specify during IndexWriter.commit
|
long |
version
Counts how often the index has been changed.
|
static int |
VERSION_40
The file format version for the segments_N codec header, up to 4.5.
|
static int |
VERSION_46
The file format version for the segments_N codec header, since 4.6+.
|
| Constructor and Description |
|---|
SegmentInfos()
Sole constructor.
|
| Modifier and Type | Method and Description |
|---|---|
void |
add(SegmentCommitInfo si)
Appends the provided
SegmentCommitInfo. |
void |
addAll(java.lang.Iterable<SegmentCommitInfo> sis)
Appends the provided
SegmentCommitInfos. |
java.util.List<SegmentCommitInfo> |
asList()
Returns all contained segments as an unmodifiable
List view. |
void |
changed()
Call this before committing if changes have been made to the
segments.
|
void |
clear()
Clear all
SegmentCommitInfos. |
SegmentInfos |
clone()
Returns a copy of this instance, also copying each
SegmentInfo.
|
java.util.Collection<java.lang.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(java.lang.String fileName)
Parse the generation off the segments file name and
return it.
|
static int |
getDefaultGenLookahedCount()
Returns the
defaultGenLookaheadCount. |
long |
getGeneration()
Returns current generation.
|
static java.io.PrintStream |
getInfoStream()
Returns
infoStream. |
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(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 java.lang.String |
getLastCommitSegmentsFileName(Directory directory)
Get the filename of the segments_N file for the most
recent commit to the index in this Directory.
|
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.
|
long |
getLastGeneration()
Returns last succesfully read or written generation.
|
java.lang.String |
getNextSegmentFileName()
Get the next segments_N filename that will be written.
|
java.lang.String |
getSegmentsFileName()
Get the segments_N filename in use by this segment infos.
|
java.util.Map<java.lang.String,java.lang.String> |
getUserData()
Return
userData saved with this commit. |
long |
getVersion()
version number when this SegmentInfos was generated.
|
SegmentCommitInfo |
info(int i)
Returns
SegmentCommitInfo at the provided
index. |
java.util.Iterator<SegmentCommitInfo> |
iterator()
Returns an unmodifiable
Iterator of contained segments in order. |
void |
read(Directory directory)
Find the latest commit (
segments_N file) and
load all SegmentCommitInfos. |
void |
read(Directory directory,
java.lang.String segmentFileName)
Read a particular segmentFileName.
|
void |
remove(SegmentCommitInfo si)
Remove the provided
SegmentCommitInfo. |
static void |
setDefaultGenLookaheadCount(int count)
Advanced: set how many times to try incrementing the
gen when loading the segments file.
|
static void |
setInfoStream(java.io.PrintStream infoStream)
If non-null, information about retries when loading
the segments file will be printed to this.
|
int |
size()
Returns number of
SegmentCommitInfos. |
java.lang.String |
toString(Directory directory)
Returns readable description of this segment.
|
int |
totalDocCount()
Returns sum of all segment's docCounts.
|
static java.lang.String |
write3xInfo(Directory dir,
SegmentInfo si,
IOContext context)
Deprecated.
|
static void |
writeSegmentsGen(Directory dir,
long generation)
A utility for writing the
IndexFileNames.SEGMENTS_GEN file to a
Directory. |
public static final int VERSION_40
public static final int VERSION_46
public static final int FORMAT_SEGMENTS_GEN_CURRENT
public int counter
public long version
public java.util.Map<java.lang.String,java.lang.String> userData
public SegmentInfos()
or
#read(Directory,String) to populate each SegmentCommitInfo. Alternatively, you can add/remove your
own SegmentCommitInfos.public SegmentCommitInfo info(int i)
SegmentCommitInfo at the provided
index.public static long getLastCommitGeneration(java.lang.String[] files)
files - -- array of file names to checkpublic static long getLastCommitGeneration(Directory directory) throws java.io.IOException
directory - -- directory to search for the latest segments_N filejava.io.IOExceptionpublic static java.lang.String getLastCommitSegmentsFileName(java.lang.String[] files)
files - -- array of file names to checkpublic static java.lang.String getLastCommitSegmentsFileName(Directory directory) throws java.io.IOException
directory - -- directory to search for the latest segments_N filejava.io.IOExceptionpublic java.lang.String getSegmentsFileName()
public static long generationFromSegmentsFileName(java.lang.String fileName)
public static void writeSegmentsGen(Directory dir, long generation)
IndexFileNames.SEGMENTS_GEN file to a
Directory.
NOTE: this is an internal utility which is kept public so that it's accessible by code from other packages. You should avoid calling this method unless you're absolutely sure what you're doing!
public java.lang.String getNextSegmentFileName()
public final void read(Directory directory, java.lang.String segmentFileName) throws java.io.IOException
directory - -- directory containing the segments filesegmentFileName - -- segment file to loadCorruptIndexException - if the index is corruptjava.io.IOException - if there is a low-level IO errorpublic final void read(Directory directory) throws java.io.IOException
segments_N file) and
load all SegmentCommitInfos.java.io.IOException@Deprecated public static java.lang.String write3xInfo(Directory dir, SegmentInfo si, IOContext context) throws java.io.IOException
java.io.IOExceptionpublic SegmentInfos clone()
clone in class java.lang.Objectpublic long getVersion()
public long getGeneration()
public long getLastGeneration()
public static void setInfoStream(java.io.PrintStream infoStream)
public static void setDefaultGenLookaheadCount(int count)
public static int getDefaultGenLookahedCount()
defaultGenLookaheadCount.setDefaultGenLookaheadCount(int)public static java.io.PrintStream getInfoStream()
infoStream.setInfoStream(java.io.PrintStream)public java.util.Collection<java.lang.String> files(Directory dir, boolean includeSegmentsFile) throws java.io.IOException
java.io.IOExceptionpublic java.lang.String toString(Directory directory)
public java.util.Map<java.lang.String,java.lang.String> getUserData()
userData saved with this commit.IndexWriter.commit()public int totalDocCount()
public void changed()
public java.util.Iterator<SegmentCommitInfo> iterator()
Iterator of contained segments in order.iterator in interface java.lang.Iterable<SegmentCommitInfo>public java.util.List<SegmentCommitInfo> asList()
List view.public int size()
SegmentCommitInfos.public void add(SegmentCommitInfo si)
SegmentCommitInfo.public void addAll(java.lang.Iterable<SegmentCommitInfo> sis)
SegmentCommitInfos.public void clear()
SegmentCommitInfos.public void remove(SegmentCommitInfo si)
SegmentCommitInfo.
WARNING: O(N) cost
Copyright © 2010 - 2024 Adobe. All Rights Reserved