(
config: &Config,
hnsw_index: &HNSWIndex,
parent_lazy_item_latest_ptr: SharedLatestNode,
prop_value: Arc<NodePropValue>,
prop_metadata: Option<Arc<NodePropMetadata>>,
current_
| 780 | |
| 781 | #[allow(clippy::too_many_arguments)] |
| 782 | pub fn index_embedding( |
| 783 | config: &Config, |
| 784 | hnsw_index: &HNSWIndex, |
| 785 | parent_lazy_item_latest_ptr: SharedLatestNode, |
| 786 | prop_value: Arc<NodePropValue>, |
| 787 | prop_metadata: Option<Arc<NodePropMetadata>>, |
| 788 | current_lazy_item_latest_ptr: SharedLatestNode, |
| 789 | cur_level: HNSWLevel, |
| 790 | version: VersionNumber, |
| 791 | file_id: IndexFileId, |
| 792 | hnsw_params: &HNSWHyperParams, |
| 793 | max_level: u8, |
| 794 | offset_counter: &HNSWIndexFileOffsetCounter, |
| 795 | distance_metric: DistanceMetric, |
| 796 | ) -> Result<(), WaCustomError> { |
| 797 | let fvec = &prop_value.vec; |
| 798 | let mut skipm = PerformantFixedSet::new(if cur_level.0 == 0 { |
| 799 | hnsw_params.level_0_neighbors_count |
| 800 | } else { |
| 801 | hnsw_params.neighbors_count |
| 802 | }); |
| 803 | let new_node_id = match &prop_metadata { |
| 804 | Some(metadata) => *metadata.replica_id, |
| 805 | None => *prop_value.id, |
| 806 | }; |
| 807 | skipm.insert(new_node_id); |
| 808 | |
| 809 | let current_lazy_item = unsafe { &*current_lazy_item_latest_ptr }.latest; |
| 810 | let current_node = unsafe { &*current_lazy_item }.try_get_data(&hnsw_index.cache)?; |
| 811 | |
| 812 | let cur_node_id = ¤t_node.get_id(); |
| 813 | |
| 814 | let mdims = prop_metadata.clone().map(|pm| pm.vec.clone()); |
| 815 | |
| 816 | let z = traverse_find_nearest( |
| 817 | config, |
| 818 | hnsw_index, |
| 819 | current_lazy_item_latest_ptr, |
| 820 | fvec, |
| 821 | Some(&prop_value.id), |
| 822 | mdims.as_deref(), |
| 823 | &mut 0, |
| 824 | &mut skipm, |
| 825 | &distance_metric, |
| 826 | true, |
| 827 | hnsw_params.ef_construction, |
| 828 | )?; |
| 829 | |
| 830 | let z = if z.is_empty() { |
| 831 | let fvec_data = VectorData { |
| 832 | id: None, |
| 833 | quantized_vec: fvec, |
| 834 | metadata: mdims.as_deref(), |
| 835 | }; |
| 836 | let cur_node_metadata = current_node.prop_metadata.clone().map(|pm| pm.vec.clone()); |
| 837 | let cur_node_data = VectorData { |
| 838 | id: Some(cur_node_id), |
| 839 | quantized_vec: ¤t_node.prop_value.vec, |
no test coverage detected