Skip to main content

storage_kit/core/query/
vector.rs

1use serde::{Deserialize, Serialize};
2
3use crate::core::ApplyDefaultLocator;
4use crate::{DenseVector, StorageLocator};
5
6use super::{ScopedQuery, VectorQueryOptions};
7/// Request to perform nearest-neighbor vector search.
8///
9/// # Examples
10///
11/// ```
12/// let request = storage_kit::database::query::NearestRequest {
13///     query: storage_kit::database::query::ScopedQuery::new(
14///         storage_kit::database::StorageLocator::new("documents"),
15///         storage_kit::database::query::VectorQueryOptions { vector_field: Some("vector".into()), ..Default::default() },
16///     ),
17///     vector: storage_kit::database::data::DenseVector::F32(vec![0.1, 0.2, 0.3]),
18/// };
19/// assert_eq!(request.query.options.vector_field.as_deref(), Some("vector"));
20/// ```
21#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
22pub struct NearestRequest {
23    /// Shared query scope and vector options.
24    pub query: ScopedQuery<VectorQueryOptions>,
25    /// Dense vector used as the search seed.
26    pub vector: DenseVector,
27}
28
29impl ApplyDefaultLocator for NearestRequest {
30    fn apply_default_locator(mut self, default: &StorageLocator) -> Self {
31        self.query = self.query.apply_default_locator(default);
32        self
33    }
34}
35
36impl NearestRequest {
37    /// Creates a nearest-neighbor request with default vector parameters.
38    ///
39    /// # Examples
40    ///
41    /// ```
42    /// let request = storage_kit::database::query::NearestRequest::new(
43    ///     storage_kit::database::StorageLocator::new("documents"),
44    ///     storage_kit::database::data::DenseVector::F32(vec![0.1, 0.2]),
45    /// );
46    /// assert_eq!(
47    ///     request.query.options.params.limit,
48    ///     storage_kit::database::query::VectorSearchParams::default().limit
49    /// );
50    /// ```
51    #[must_use]
52    pub fn new(locator: StorageLocator, vector: DenseVector) -> Self {
53        Self {
54            query: ScopedQuery::vector(locator),
55            vector,
56        }
57    }
58}