Skip to main content

qdrant_edge/edge/
info.rs

1use std::collections::HashMap;
2
3use crate::segment::types::{PayloadIndexInfo, PayloadKeyType};
4
5use super::EdgeShard;
6
7#[derive(Clone, Debug)]
8pub struct ShardInfo {
9    /// Number of segments in shard.
10    /// Each segment has independent vector as payload indexes
11    pub segments_count: usize,
12    /// Approximate number of points (vectors + payloads) in shard.
13    /// Each point could be accessed by unique id.
14    pub points_count: usize,
15    /// Approximate number of indexed vectors in the shard.
16    /// Indexed vectors in large segments are faster to query,
17    /// as it is stored in vector index (HNSW).
18    pub indexed_vectors_count: usize,
19    /// Types of stored payload
20    pub payload_schema: HashMap<PayloadKeyType, PayloadIndexInfo>,
21}
22
23impl EdgeShard {
24    pub fn info(&self) -> ShardInfo {
25        let mut segments_count = 0;
26        let mut points_count = 0;
27        let mut indexed_vectors_count = 0;
28        let mut payload_schema = HashMap::new();
29
30        for (_, segment) in self.segments.read().iter() {
31            segments_count += 1;
32
33            let segment_info = segment.get().read().info();
34
35            points_count += segment_info.num_points;
36            indexed_vectors_count += segment_info.num_indexed_vectors;
37
38            for (payload_key, payload_index) in segment_info.index_schema {
39                payload_schema
40                    .entry(payload_key)
41                    .and_modify(|total: &mut PayloadIndexInfo| total.points += payload_index.points)
42                    .or_insert(payload_index);
43            }
44        }
45
46        ShardInfo {
47            segments_count,
48            points_count,
49            indexed_vectors_count,
50            payload_schema,
51        }
52    }
53}