use std::collections::HashMap;
use std::sync::Arc;
use serde::{Deserialize, Serialize};
use crate::analysis::analyzer::analyzer::Analyzer;
use crate::analysis::analyzer::standard::StandardAnalyzer;
use crate::lexical::core::field::FieldOption;
#[derive(Clone, Serialize, Deserialize)]
pub struct InvertedIndexConfig {
pub max_docs_per_segment: u64,
pub write_buffer_size: usize,
pub compress_stored_fields: bool,
pub store_term_vectors: bool,
pub merge_factor: u32,
pub max_segments: u32,
#[serde(skip)]
#[serde(default = "default_analyzer")]
pub analyzer: Arc<dyn Analyzer>,
#[serde(default)]
pub default_fields: Vec<String>,
#[serde(default)]
pub shard_id: u16,
#[serde(default)]
pub fields: HashMap<String, FieldOption>,
}
fn default_analyzer() -> Arc<dyn Analyzer> {
Arc::new(StandardAnalyzer::new().expect("StandardAnalyzer should be creatable"))
}
impl Default for InvertedIndexConfig {
fn default() -> Self {
InvertedIndexConfig {
max_docs_per_segment: 1000000,
write_buffer_size: 1024 * 1024, compress_stored_fields: false,
store_term_vectors: false,
merge_factor: 10,
max_segments: 100,
analyzer: std::sync::Arc::new(
crate::analysis::analyzer::standard::StandardAnalyzer::new()
.expect("StandardAnalyzer should be creatable"),
),
default_fields: Vec::new(),
shard_id: 0,
fields: HashMap::new(),
}
}
}
impl std::fmt::Debug for InvertedIndexConfig {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("InvertedIndexConfig")
.field("max_docs_per_segment", &self.max_docs_per_segment)
.field("write_buffer_size", &self.write_buffer_size)
.field("compress_stored_fields", &self.compress_stored_fields)
.field("store_term_vectors", &self.store_term_vectors)
.field("merge_factor", &self.merge_factor)
.field("max_segments", &self.max_segments)
.field("analyzer", &self.analyzer.name())
.field("default_fields", &self.default_fields)
.finish()
}
}