vicinity 0.11.1

Approximate nearest-neighbor search
Documentation
use super::search::{IVFPQParams, Quantizer};
use serde::{Deserialize, Serialize};

#[derive(Clone, Debug, Serialize, Deserialize)]
pub(super) struct PersistedIVFPQParams {
    pub(super) num_clusters: usize,
    pub(super) nprobe: usize,
    pub(super) num_codebooks: usize,
    pub(super) codebook_size: usize,
    pub(super) use_opq: bool,
    pub(super) seed: u64,
}

impl From<&IVFPQParams> for PersistedIVFPQParams {
    fn from(params: &IVFPQParams) -> Self {
        Self {
            num_clusters: params.num_clusters,
            nprobe: params.nprobe,
            num_codebooks: params.num_codebooks,
            codebook_size: params.codebook_size,
            use_opq: params.use_opq,
            seed: params.seed,
        }
    }
}

impl PersistedIVFPQParams {
    pub(super) fn into_params(self) -> IVFPQParams {
        IVFPQParams {
            num_clusters: self.num_clusters,
            nprobe: self.nprobe,
            num_codebooks: self.num_codebooks,
            codebook_size: self.codebook_size,
            use_opq: self.use_opq,
            seed: self.seed,
            #[cfg(feature = "id-compression")]
            id_compression: None,
            #[cfg(feature = "id-compression")]
            compression_threshold: IVFPQParams::default().compression_threshold,
        }
    }
}

#[derive(Debug, Serialize, Deserialize)]
pub(super) struct IVFPQManifest {
    pub(super) version: u32,
    pub(super) dimension: usize,
    pub(super) num_vectors: usize,
    pub(super) num_centroids: usize,
    pub(super) raw_vectors_present: bool,
    pub(super) params: PersistedIVFPQParams,
    pub(super) quantizer: Quantizer,
    #[serde(default)]
    pub(super) filter_field: Option<String>,
    #[serde(default)]
    pub(super) filter_metadata: Vec<PersistedFilterMetadata>,
}

#[derive(Debug, Serialize, Deserialize)]
pub(super) struct PersistedFilterMetadata {
    pub(super) doc_id: u32,
    pub(super) metadata: crate::filtering::DocumentMetadata,
}