linkrs_query/executor/streaming/operators/spec/
vector.rs1use crate::parser::ast::vector::VectorDistance;
4
5#[cfg(feature = "vector")]
11pub use simvec::types::VectorFilter as SpecVectorFilter;
12
13#[cfg(not(feature = "vector"))]
14#[derive(Debug, Clone)]
15pub struct SpecVectorFilter;
16
17#[derive(Debug, Clone)]
19pub enum VectorManageCommand {
20 Create {
21 index_name: String,
22 tag_name: String,
23 field_name: String,
24 vector_size: usize,
25 distance: VectorDistance,
26 space_id: u64,
27 hnsw_m: Option<usize>,
28 hnsw_ef_construct: Option<usize>,
29 quantization: Option<crate::parser::ast::vector::QuantizationKind>,
30 quantile: Option<f32>,
31 compression: Option<crate::parser::ast::vector::CompressionRatioKind>,
32 always_ram: Option<bool>,
33 },
34 Drop {
35 index_name: String,
36 if_exists: bool,
37 space_id: u64,
42 tag_name: String,
43 field_name: String,
44 },
45}
46
47#[derive(Debug, Clone)]
49pub enum VectorSpec {
50 VectorManage {
51 space_name: String,
52 command: VectorManageCommand,
53 },
54 VectorSearch {
55 space_name: String,
56 space_id: u64,
57 index_name: String,
58 query_vector: Vec<f32>,
59 query_text: Option<String>,
63 top_k: u32,
64 tag_name: String,
65 field_name: String,
66 threshold: Option<f32>,
68 filter: Option<SpecVectorFilter>,
70 offset: usize,
73 ryw_config: Option<linkrs_core::types::ReadYourWritesConfig>,
75 },
76 VectorLookup {
77 space_name: String,
78 space_id: u64,
79 index_name: String,
80 query_vector: Vec<f32>,
81 query_text: Option<String>,
83 top_k: u32,
84 tag_name: String,
85 field_name: String,
86 ryw_config: Option<linkrs_core::types::ReadYourWritesConfig>,
88 },
89 VectorMatch {
90 space_name: String,
91 pattern: String,
92 field: String,
93 query_vector: Vec<f32>,
94 query_text: Option<String>,
96 threshold: Option<f32>,
97 tag_name: String,
98 field_name: String,
99 space_id: u64,
100 ryw_config: Option<linkrs_core::types::ReadYourWritesConfig>,
102 },
103}
104
105impl VectorSpec {
106 pub fn ryw_config(&self) -> Option<linkrs_core::types::ReadYourWritesConfig> {
108 match self {
109 Self::VectorManage { .. } => None,
110 Self::VectorSearch { ryw_config, .. }
111 | Self::VectorLookup { ryw_config, .. }
112 | Self::VectorMatch { ryw_config, .. } => *ryw_config,
113 }
114 }
115}