Skip to main content

qdrant_edge/edge/edge_shard/
shard_read.rs

1use std::path::Path;
2use std::sync::Arc;
3
4use crate::segment::common::operation_error::OperationResult;
5use crate::segment::data_types::facets::FacetResponse;
6use crate::segment::types::{PointIdType, ScoredPoint};
7use crate::shard::locked_segment::LockedSegment;
8use crate::shard::retrieve::record_internal::RecordInternal;
9
10use crate::edge::read_view::{EdgeShardRead, ReadViewProvider};
11use crate::edge::requests::{
12    CountRequest, FacetRequest, QueryRequest, RetrieveRequest, ScrollRequest, SearchRequest,
13};
14use crate::edge::{EdgeConfig, EdgeShard, ShardInfo};
15
16/// The read-write shard's segments are heterogeneous — `Segment` and `ProxySegment` coexist during
17/// optimization — so the handle is the [`LockedSegment`] enum (static enum dispatch), and the read
18/// view is built over that.
19impl ReadViewProvider for EdgeShard {
20    type Handle = LockedSegment;
21
22    fn read_segments(&self) -> Vec<LockedSegment> {
23        self.segments
24            .read()
25            .non_appendable_then_appendable_segments()
26            .collect()
27    }
28
29    fn config_snapshot(&self) -> Arc<EdgeConfig> {
30        Arc::new(self.config.read().clone())
31    }
32
33    fn search_pool(&self) -> Arc<rayon::ThreadPool> {
34        self.search_pool.clone()
35    }
36
37    fn path(&self) -> &Path {
38        &self.path
39    }
40}
41
42/// Inherent read API of [`EdgeShard`], kept for backwards compatibility (`edge` is a public crate):
43/// callers can use these without importing [`EdgeShardRead`]. Each just forwards to the trait's
44/// shared implementation.
45impl EdgeShard {
46    /// This method is DEPRECATED and should be replaced with query.
47    pub fn search(&self, request: SearchRequest) -> OperationResult<Vec<ScoredPoint>> {
48        EdgeShardRead::search(self, request)
49    }
50
51    pub fn query(&self, request: QueryRequest) -> OperationResult<Vec<ScoredPoint>> {
52        EdgeShardRead::query(self, request)
53    }
54
55    pub fn scroll(
56        &self,
57        request: ScrollRequest,
58    ) -> OperationResult<(Vec<RecordInternal>, Option<PointIdType>)> {
59        EdgeShardRead::scroll(self, request)
60    }
61
62    pub fn retrieve(&self, request: RetrieveRequest) -> OperationResult<Vec<RecordInternal>> {
63        EdgeShardRead::retrieve(self, request)
64    }
65
66    pub fn count(&self, request: CountRequest) -> OperationResult<usize> {
67        EdgeShardRead::count(self, request)
68    }
69
70    pub fn facet(&self, request: FacetRequest) -> OperationResult<FacetResponse> {
71        EdgeShardRead::facet(self, request)
72    }
73
74    pub fn info(&self) -> OperationResult<ShardInfo> {
75        EdgeShardRead::info(self)
76    }
77}