qdrant_edge/shard/operations/
vector_ops.rs1use crate::segment::types::{Filter, PointIdType, VectorNameBuf};
2use serde::{Deserialize, Serialize};
3use strum::{EnumDiscriminants, EnumIter};
4
5use super::point_ops::{PointIdsList, VectorStructPersisted};
6
7#[derive(Clone, Debug, PartialEq, Deserialize, Serialize, EnumDiscriminants, Hash)]
8#[strum_discriminants(derive(EnumIter))]
9#[serde(rename_all = "snake_case")]
10pub enum VectorOperations {
11 UpdateVectors(UpdateVectorsOp),
13 DeleteVectors(PointIdsList, Vec<VectorNameBuf>),
15 DeleteVectorsByFilter(Filter, Vec<VectorNameBuf>),
17}
18
19impl VectorOperations {
20 pub fn point_ids(&self) -> Option<Vec<PointIdType>> {
21 match self {
22 Self::UpdateVectors(op) => Some(op.points.iter().map(|point| point.id).collect()),
23 Self::DeleteVectors(points, _) => Some(points.points.clone()),
24 Self::DeleteVectorsByFilter(_, _) => None,
25 }
26 }
27
28 pub fn retain_point_ids<F>(&mut self, filter: F)
29 where
30 F: Fn(&PointIdType) -> bool,
31 {
32 match self {
33 Self::UpdateVectors(op) => op.points.retain(|point| filter(&point.id)),
34 Self::DeleteVectors(points, _) => points.points.retain(filter),
35 Self::DeleteVectorsByFilter(_, _) => (),
36 }
37 }
38}
39
40#[derive(Clone, Debug, PartialEq, Deserialize, Serialize, Hash)]
41pub struct UpdateVectorsOp {
42 pub points: Vec<PointVectorsPersisted>,
44 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub update_filter: Option<Filter>,
47}
48
49#[derive(Clone, Debug, PartialEq, Deserialize, Serialize, Hash)]
50pub struct PointVectorsPersisted {
51 pub id: PointIdType,
53 pub vector: VectorStructPersisted,
55}