From 41d5ecd63b2bcb597fe91d6f515cb9bc763535d2 Mon Sep 17 00:00:00 2001 From: Ivan Pleshkov Date: Wed, 8 Mar 2023 20:00:08 +0000 Subject: [PATCH] separate payload and vector index bases --- lib/segment/src/index/mod.rs | 6 ++-- .../{index_base.rs => payload_index_base.rs} | 27 +--------------- lib/segment/src/index/vector_index_base.rs | 31 +++++++++++++++++++ 3 files changed, 36 insertions(+), 28 deletions(-) rename lib/segment/src/index/{index_base.rs => payload_index_base.rs} (78%) create mode 100644 lib/segment/src/index/vector_index_base.rs diff --git a/lib/segment/src/index/mod.rs b/lib/segment/src/index/mod.rs index 26be31f70d..5f742d3746 100644 --- a/lib/segment/src/index/mod.rs +++ b/lib/segment/src/index/mod.rs @@ -1,6 +1,7 @@ pub mod field_index; pub mod hnsw_index; -mod index_base; +mod vector_index_base; +mod payload_index_base; mod key_encoding; mod payload_config; pub mod plain_payload_index; @@ -10,4 +11,5 @@ mod sample_estimation; mod struct_filter_context; pub mod struct_payload_index; mod visited_pool; -pub use index_base::*; +pub use vector_index_base::*; +pub use payload_index_base::*; diff --git a/lib/segment/src/index/index_base.rs b/lib/segment/src/index/payload_index_base.rs similarity index 78% rename from lib/segment/src/index/index_base.rs rename to lib/segment/src/index/payload_index_base.rs index df33463d35..73da7ba659 100644 --- a/lib/segment/src/index/index_base.rs +++ b/lib/segment/src/index/payload_index_base.rs @@ -1,39 +1,16 @@ use std::collections::HashMap; use std::path::{Path, PathBuf}; -use std::sync::atomic::AtomicBool; use serde_json::Value; use crate::common::Flusher; -use crate::data_types::vectors::VectorElementType; use crate::entry::entry_point::OperationResult; use crate::index::field_index::{CardinalityEstimation, PayloadBlockCondition}; use crate::payload_storage::FilterContext; -use crate::telemetry::VectorIndexSearchesTelemetry; use crate::types::{ Filter, Payload, PayloadFieldSchema, PayloadKeyType, PayloadKeyTypeRef, PayloadSchemaType, - PointOffsetType, SearchParams, + PointOffsetType, }; -use crate::vector_storage::ScoredPointOffset; - -/// Trait for vector searching -pub trait VectorIndex { - /// Return list of Ids with fitting - fn search( - &self, - vectors: &[&[VectorElementType]], - filter: Option<&Filter>, - top: usize, - params: Option<&SearchParams>, - ) -> Vec>; - - /// Force internal index rebuild. - fn build_index(&mut self, stopped: &AtomicBool) -> OperationResult<()>; - - fn get_telemetry_data(&self) -> VectorIndexSearchesTelemetry; - - fn files(&self) -> Vec; -} pub trait PayloadIndex { /// Get indexed fields @@ -110,5 +87,3 @@ pub trait PayloadIndex { fn files(&self) -> Vec; } - -pub type VectorIndexSS = dyn VectorIndex + Sync + Send; diff --git a/lib/segment/src/index/vector_index_base.rs b/lib/segment/src/index/vector_index_base.rs new file mode 100644 index 0000000000..a00feac143 --- /dev/null +++ b/lib/segment/src/index/vector_index_base.rs @@ -0,0 +1,31 @@ +use std::path::PathBuf; +use std::sync::atomic::AtomicBool; + +use crate::data_types::vectors::VectorElementType; +use crate::entry::entry_point::OperationResult; +use crate::telemetry::VectorIndexSearchesTelemetry; +use crate::types::{ + Filter, SearchParams, +}; +use crate::vector_storage::ScoredPointOffset; + +/// Trait for vector searching +pub trait VectorIndex { + /// Return list of Ids with fitting + fn search( + &self, + vectors: &[&[VectorElementType]], + filter: Option<&Filter>, + top: usize, + params: Option<&SearchParams>, + ) -> Vec>; + + /// Force internal index rebuild. + fn build_index(&mut self, stopped: &AtomicBool) -> OperationResult<()>; + + fn get_telemetry_data(&self) -> VectorIndexSearchesTelemetry; + + fn files(&self) -> Vec; +} + +pub type VectorIndexSS = dyn VectorIndex + Sync + Send;