Lucene 9.0 stored fields format.
Principle
This StoredFieldsFormat compresses blocks of documents in order to improve the
compression ratio compared to document-level compression. It uses the LZ4 compression algorithm by default in 8KB blocks and
shared dictionaries, which is fast to compress and very fast to decompress data. Although the
default compression method that is used (BEST_SPEED) focuses more on
speed than on compression ratio, it should provide interesting compression ratios for redundant
inputs (such as log files, HTML or plain text). For higher compression, you can choose (BEST_COMPRESSION), which uses the DEFLATE algorithm with 48KB blocks and shared
dictionaries for a better ratio at the expense of slower performance. These two options can be
configured like this:
// the default: for high performance indexWriterConfig.setCodec(new Lucene100Codec(Mode.BEST_SPEED)); // instead for higher performance (but slower): // indexWriterConfig.setCodec(new Lucene100Codec(Mode.BEST_COMPRESSION));
File formats
Stored fields are represented by three files:
A fields data file (extension .fdt). This file stores a compact
representation of documents in compressed blocks of 8KB or more. When writing a segment,
documents are appended to an in-memory byte[] buffer. When its size reaches
80KB or more, some metadata about the documents is flushed to disk, immediately followed by
a compressed representation of the buffer using the LZ4 compression
format.
Notes
StoredFieldVisitors which are only interested in the first fields of a
document to not have to decompress 10MB of data if the document is 10MB, but only
8-16KB(may cross the block).
A fields index file (extension .fdx). This file stores two monotonic arrays, one for the first doc IDs of each block of
compressed documents, and another one for the corresponding offsets on disk. At search
time, the array containing doc IDs is binary-searched in order to find the block that
contains the expected doc ID, and the associated offset on disk is retrieved from the
second array.
A fields meta file (extension .fdm). This file stores metadata about the
monotonic arrays stored in the index file.
Known limitations
This StoredFieldsFormat does not support individual documents larger than (
231 - 214) bytes.
| constant | type | note |
|---|---|---|
| MODE_KEY | String | Attribute key for compression mode. |
| BEST_COMPRESSION_MODE | CompressionMode | Compression mode for Mode#BEST_COMPRESSION |
| BEST_SPEED_MODE | CompressionMode | Compression mode for Mode#BEST_SPEED |
<init>()Stored fields format with default options
<init>(org.apache.lucene.codecs.lucene90.Lucene90StoredFieldsFormat.Mode mode)Stored fields format with specified mode
fieldsReader(org.apache.lucene.store.Directory directory, org.apache.lucene.index.SegmentInfo si, org.apache.lucene.index.FieldInfos fn, org.apache.lucene.store.IOContext context)fieldsWriter(org.apache.lucene.store.Directory directory, org.apache.lucene.index.SegmentInfo si, org.apache.lucene.store.IOContext context)