@@ -121,12 +121,14 @@ pub struct IndexingSettings {
121121 /// Merge policy for Parquet (metrics/sketches) splits. Controls how
122122 /// Parquet splits are compacted within time windows. Only used by
123123 /// indexes that use the Parquet indexing pipeline.
124- #[ serde( default ) ]
125- pub parquet_merge_policy : ParquetMergePolicyConfig ,
126- /// Parquet-specific indexing settings (sort schema, window duration,
127- /// compression). Only used by indexes that use the Parquet pipeline.
128- #[ serde( default ) ]
129- pub parquet_indexing : ParquetIndexingConfig ,
124+ /// When absent, defaults are used (see [`ParquetMergePolicyConfig`]).
125+ #[ serde( default , skip_serializing_if = "Option::is_none" ) ]
126+ pub parquet_merge_policy : Option < ParquetMergePolicyConfig > ,
127+ /// Parquet-specific indexing settings (sort schema, window duration).
128+ /// Only used by indexes that use the Parquet pipeline.
129+ /// When absent, defaults are used (see [`ParquetIndexingConfig`]).
130+ #[ serde( default , skip_serializing_if = "Option::is_none" ) ]
131+ pub parquet_indexing : Option < ParquetIndexingConfig > ,
130132 #[ serde( default ) ]
131133 pub resources : IndexingResources ,
132134}
@@ -147,12 +149,11 @@ pub struct ParquetIndexingConfig {
147149 /// (`__s` = string, `__i` = int64, `_secs` = uint64 timestamp).
148150 ///
149151 /// The sort order determines:
150- /// - **Query pruning**: queries that filter on leading sort columns can
151- /// skip entire splits whose row key ranges don't match.
152- /// - **Compression**: columns with good locality (e.g., metric_name first)
153- /// compress better in Parquet's columnar format.
154- /// - **Compaction scope**: splits with different sort schemas are never
155- /// merged together.
152+ /// - **Query pruning**: queries that filter on leading sort columns can skip entire splits
153+ /// whose row key ranges don't match.
154+ /// - **Compression**: columns with good locality (e.g., metric_name first) compress better in
155+ /// Parquet's columnar format.
156+ /// - **Compaction scope**: splits with different sort schemas are never merged together.
156157 ///
157158 /// When `None`, the product-type default is used (see below).
158159 ///
@@ -208,6 +209,18 @@ impl IndexingSettings {
208209 Duration :: from_secs ( self . commit_timeout_secs as u64 )
209210 }
210211
212+ /// Returns the Parquet merge policy config, using defaults if not
213+ /// explicitly configured.
214+ pub fn parquet_merge_policy ( & self ) -> ParquetMergePolicyConfig {
215+ self . parquet_merge_policy . clone ( ) . unwrap_or_default ( )
216+ }
217+
218+ /// Returns the Parquet indexing config, using defaults if not
219+ /// explicitly configured.
220+ pub fn parquet_indexing ( & self ) -> ParquetIndexingConfig {
221+ self . parquet_indexing . clone ( ) . unwrap_or_default ( )
222+ }
223+
211224 fn default_commit_timeout_secs ( ) -> usize {
212225 60
213226 }
@@ -241,8 +254,8 @@ impl Default for IndexingSettings {
241254 docstore_compression_level : Self :: default_docstore_compression_level ( ) ,
242255 split_num_docs_target : Self :: default_split_num_docs_target ( ) ,
243256 merge_policy : MergePolicyConfig :: default ( ) ,
244- parquet_merge_policy : ParquetMergePolicyConfig :: default ( ) ,
245- parquet_indexing : ParquetIndexingConfig :: default ( ) ,
257+ parquet_merge_policy : None ,
258+ parquet_indexing : None ,
246259 resources : IndexingResources :: default ( ) ,
247260 }
248261 }
0 commit comments