Insert a sparse vector for a document.
(
&mut self,
task: &ExecutionTask,
tid: u64,
collection: &str,
field_name: &str,
doc_id: &str,
entries: &[(u32, f32)],
)
| 43 | |
| 44 | /// Insert a sparse vector for a document. |
| 45 | pub(in crate::data::executor) fn execute_sparse_insert( |
| 46 | &mut self, |
| 47 | task: &ExecutionTask, |
| 48 | tid: u64, |
| 49 | collection: &str, |
| 50 | field_name: &str, |
| 51 | doc_id: &str, |
| 52 | entries: &[(u32, f32)], |
| 53 | ) -> Response { |
| 54 | debug!( |
| 55 | core = self.core_id, |
| 56 | %collection, |
| 57 | %field_name, |
| 58 | %doc_id, |
| 59 | nnz = entries.len(), |
| 60 | "sparse insert" |
| 61 | ); |
| 62 | |
| 63 | let sv = match nodedb_types::SparseVector::from_entries(entries.to_vec()) { |
| 64 | Ok(sv) => sv, |
| 65 | Err(e) => { |
| 66 | return self.response_error( |
| 67 | task, |
| 68 | ErrorCode::RejectedConstraint { |
| 69 | detail: String::new(), |
| 70 | constraint: e.to_string(), |
| 71 | }, |
| 72 | ); |
| 73 | } |
| 74 | }; |
| 75 | |
| 76 | let index = self.get_or_create_sparse_index(tid, collection, field_name); |
| 77 | index.insert(doc_id, &sv); |
| 78 | self.checkpoint_coordinator.mark_dirty("vector", 1); |
| 79 | self.response_ok(task) |
| 80 | } |
| 81 | |
| 82 | /// Search the sparse inverted index via dot-product scoring. |
| 83 | pub(in crate::data::executor) fn execute_sparse_search( |
no test coverage detected