2
2
// This source code is licensed under both the Apache 2.0 and MIT License
3
3
// (found in the LICENSE-* files in the repository)
4
4
5
- use crate :: { path:: absolute_path, BlobTree , Cache , CompressionType , DescriptorTable , Tree } ;
5
+ use crate :: {
6
+ path:: absolute_path, prefix:: SharedPrefixExtractor , BlobTree , Cache , CompressionType ,
7
+ DescriptorTable , Tree ,
8
+ } ;
6
9
use std:: {
7
10
path:: { Path , PathBuf } ,
8
11
sync:: Arc ,
@@ -94,6 +97,10 @@ pub struct Config {
94
97
/// Descriptor table to use
95
98
#[ doc( hidden) ]
96
99
pub descriptor_table : Arc < DescriptorTable > ,
100
+
101
+ /// Prefix extractor for bloom filters
102
+ #[ doc( hidden) ]
103
+ pub prefix_extractor : Option < SharedPrefixExtractor > ,
97
104
}
98
105
99
106
impl Default for Config {
@@ -115,6 +122,7 @@ impl Default for Config {
115
122
compression : CompressionType :: None ,
116
123
blob_compression : CompressionType :: None ,
117
124
bloom_bits_per_key : 10 ,
125
+ prefix_extractor : None ,
118
126
119
127
blob_file_target_size : /* 64 MiB */ 64 * 1_024 * 1_024 ,
120
128
blob_file_separation_threshold : /* 4 KiB */ 4 * 1_024 ,
@@ -312,6 +320,30 @@ impl Config {
312
320
self
313
321
}
314
322
323
+ /// Sets the prefix extractor for bloom filters.
324
+ ///
325
+ /// A prefix extractor allows bloom filters to index prefixes of keys
326
+ /// instead of (or in addition to) the full keys. This enables efficient
327
+ /// filtering for prefix-based queries.
328
+ ///
329
+ /// # Example
330
+ ///
331
+ /// ```
332
+ /// # use lsm_tree::Config;
333
+ /// use lsm_tree::prefix::FixedPrefixExtractor;
334
+ /// use std::sync::Arc;
335
+ ///
336
+ /// # let path = tempfile::tempdir()?;
337
+ /// let config = Config::new(path)
338
+ /// .prefix_extractor(Arc::new(FixedPrefixExtractor::new(8)));
339
+ /// # Ok::<(), Box<dyn std::error::Error>>(())
340
+ /// ```
341
+ #[ must_use]
342
+ pub fn prefix_extractor ( mut self , extractor : SharedPrefixExtractor ) -> Self {
343
+ self . prefix_extractor = Some ( extractor) ;
344
+ self
345
+ }
346
+
315
347
/// Opens a tree using the config.
316
348
///
317
349
/// # Errors
0 commit comments