Skip to content

Commit

Permalink
Extract payload operations into payload module
Browse files Browse the repository at this point in the history
  • Loading branch information
timvisee committed Jun 26, 2024
1 parent d38f3ac commit e91e2f3
Show file tree
Hide file tree
Showing 3 changed files with 183 additions and 170 deletions.
4 changes: 3 additions & 1 deletion src/qdrant_client/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ pub mod config;
mod conversions;
pub mod error;
mod index;
mod payload;
mod points;
mod query;
mod search;
Expand Down Expand Up @@ -65,7 +66,8 @@ pub type QdrantBuilder = QdrantConfig;
/// Categories:
///
/// - [Collection operations](Self#collection-operations) - manage collections, aliases and cluster configuration
/// - [Point operations](Self#point-operations) - manage points, vectors and payloads
/// - [Point operations](Self#point-operations) - manage points and vectors
/// - [Payload operations](Self#payload-operations) - manage point payloads
/// - [Search operations](Self#search-operations) - search and explore points
/// - [Query operations](Self#query-operations) - query points using universal search
/// - [Index operations](Self#index-operations) - manage field and payload indices
Expand Down
176 changes: 176 additions & 0 deletions src/qdrant_client/payload.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
use crate::qdrant::{
ClearPayloadPoints, DeletePayloadPoints, PointsOperationResponse, SetPayloadPoints,
};
use crate::qdrant_client::{Qdrant, QdrantResult};

/// # Payload operations
///
/// Manage point payloads.
///
/// Documentation: <https://qdrant.tech/documentation/concepts/payload/>
impl Qdrant {
/// Set payload of points.
///
/// Sets only the given payload values on a point, leaving other existing payloads in place.
///
/// ```no_run
///# use qdrant_client::{Qdrant, QdrantError};
/// use qdrant_client::Payload;
/// use qdrant_client::qdrant::{PointsIdsList, SetPayloadPointsBuilder};
/// use serde_json::json;
///
///# async fn set_payload(client: &Qdrant)
///# -> Result<(), QdrantError> {
/// let payload: Payload = json!({
/// "property1": "string",
/// "property2": "string",
/// })
/// .try_into()
/// .unwrap();
///
/// client
/// .set_payload(
/// SetPayloadPointsBuilder::new("my_collection", payload)
/// .points_selector(PointsIdsList {
/// ids: vec![0.into(), 3.into(), 10.into()],
/// })
/// .wait(true),
/// )
/// .await?;
///# Ok(())
///# }
/// ```
///
/// Documentation: <https://qdrant.tech/documentation/concepts/payload/#set-payload>
pub async fn set_payload(
&self,
request: impl Into<SetPayloadPoints>,
) -> QdrantResult<PointsOperationResponse> {
let request = &request.into();

self.with_points_client(|mut points_api| async move {
let result = points_api.set_payload(request.clone()).await?;
Ok(result.into_inner())
})
.await
}

/// Overwrite payload of points.
///
/// Sets the given payload values on a point, completely replacing existing payload.
///
/// ```no_run
///# use qdrant_client::{Qdrant, QdrantError};
/// use qdrant_client::Payload;
/// use qdrant_client::qdrant::{
/// points_selector::PointsSelectorOneOf, PointsIdsList, SetPayloadPointsBuilder,
/// };
/// use serde_json::json;
///
///# async fn overwrite_payload(client: &Qdrant)
///# -> Result<(), QdrantError> {
/// let payload: Payload = json!({
/// "property1": "string",
/// "property2": "string",
/// })
/// .try_into()
/// .unwrap();
///
/// client
/// .overwrite_payload(
/// SetPayloadPointsBuilder::new("my_collection", payload)
/// .points_selector(PointsSelectorOneOf::Points(PointsIdsList {
/// ids: vec![0.into(), 3.into(), 10.into()],
/// }))
/// .wait(true),
/// )
/// .await?;
///# Ok(())
///# }
/// ```
///
/// Documentation: <https://qdrant.tech/documentation/concepts/payload/#overwrite-payload>
pub async fn overwrite_payload(
&self,
request: impl Into<SetPayloadPoints>,
) -> QdrantResult<PointsOperationResponse> {
let request = &request.into();

self.with_points_client(|mut points_api| async move {
let result = points_api.overwrite_payload(request.clone()).await?;
Ok(result.into_inner())
})
.await
}

/// Delete specified payload keys of points.
///
/// ```no_run
///# use qdrant_client::{Qdrant, QdrantError};
/// use qdrant_client::qdrant::{DeletePayloadPointsBuilder, PointsIdsList};
///
///# async fn delete_payload(client: &Qdrant)
///# -> Result<(), QdrantError> {
/// client
/// .delete_payload(
/// DeletePayloadPointsBuilder::new(
/// "my_collection",
/// vec!["color".to_string(), "price".to_string()],
/// )
/// .points_selector(PointsIdsList {
/// ids: vec![0.into(), 3.into(), 100.into()],
/// })
/// .wait(true),
/// )
/// .await?;
///# Ok(())
///# }
/// ```
///
/// Documentation: <https://qdrant.tech/documentation/concepts/payload/#delete-payload-keys>
pub async fn delete_payload(
&self,
request: impl Into<DeletePayloadPoints>,
) -> QdrantResult<PointsOperationResponse> {
let request = &request.into();

self.with_points_client(|mut points_api| async move {
let result = points_api.delete_payload(request.clone()).await?;
Ok(result.into_inner())
})
.await
}

/// Clear all payload of points.
///
/// ```no_run
///# use qdrant_client::{Qdrant, QdrantError};
/// use qdrant_client::qdrant::{ClearPayloadPointsBuilder, PointsIdsList};
///
///# async fn clear_payload(client: &Qdrant)
///# -> Result<(), QdrantError> {
/// client
/// .clear_payload(ClearPayloadPointsBuilder::new("my_collection").points(
/// PointsIdsList {
/// ids: vec![0.into(), 3.into(), 100.into()],
/// },
/// ))
/// .await?;
///# Ok(())
///# }
/// ```
///
/// Documentation: <https://qdrant.tech/documentation/concepts/payload/#clear-payload>
pub async fn clear_payload(
&self,
request: impl Into<ClearPayloadPoints>,
) -> QdrantResult<PointsOperationResponse> {
let request = &request.into();

self.with_points_client(|mut points_api| async move {
let result = points_api.clear_payload(request.clone()).await?;
Ok(result.into_inner())
})
.await
}
}
173 changes: 4 additions & 169 deletions src/qdrant_client/points.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ use tonic::Status;
use crate::auth::TokenInterceptor;
use crate::qdrant::points_client::PointsClient;
use crate::qdrant::{
ClearPayloadPoints, CountPoints, CountResponse, DeletePayloadPoints, DeletePointVectors,
DeletePoints, GetPoints, GetResponse, PointsOperationResponse, ScrollPoints, ScrollResponse,
SetPayloadPoints, UpdateBatchPoints, UpdateBatchResponse, UpdatePointVectors, UpsertPoints,
CountPoints, CountResponse, DeletePointVectors, DeletePoints, GetPoints, GetResponse,
PointsOperationResponse, ScrollPoints, ScrollResponse, UpdateBatchPoints, UpdateBatchResponse,
UpdatePointVectors, UpsertPoints,
};
use crate::qdrant_client::{Qdrant, QdrantResult};

/// # Point operations
///
/// Manage points, vectors and payloads.
/// Manage points and vectors.
///
/// Documentation: <https://qdrant.tech/documentation/concepts/points/>
impl Qdrant {
Expand Down Expand Up @@ -501,169 +501,4 @@ impl Qdrant {
})
.await
}

/// Set payload of points.
///
/// Sets only the given payload values on a point, leaving other existing payloads in place.
///
/// ```no_run
///# use qdrant_client::{Qdrant, QdrantError};
/// use qdrant_client::Payload;
/// use qdrant_client::qdrant::{PointsIdsList, SetPayloadPointsBuilder};
/// use serde_json::json;
///
///# async fn set_payload(client: &Qdrant)
///# -> Result<(), QdrantError> {
/// let payload: Payload = json!({
/// "property1": "string",
/// "property2": "string",
/// })
/// .try_into()
/// .unwrap();
///
/// client
/// .set_payload(
/// SetPayloadPointsBuilder::new("my_collection", payload)
/// .points_selector(PointsIdsList {
/// ids: vec![0.into(), 3.into(), 10.into()],
/// })
/// .wait(true),
/// )
/// .await?;
///# Ok(())
///# }
/// ```
///
/// Documentation: <https://qdrant.tech/documentation/concepts/payload/#set-payload>
pub async fn set_payload(
&self,
request: impl Into<SetPayloadPoints>,
) -> QdrantResult<PointsOperationResponse> {
let request = &request.into();

self.with_points_client(|mut points_api| async move {
let result = points_api.set_payload(request.clone()).await?;
Ok(result.into_inner())
})
.await
}

/// Overwrite payload of points.
///
/// Sets the given payload values on a point, completely replacing existing payload.
///
/// ```no_run
///# use qdrant_client::{Qdrant, QdrantError};
/// use qdrant_client::Payload;
/// use qdrant_client::qdrant::{
/// points_selector::PointsSelectorOneOf, PointsIdsList, SetPayloadPointsBuilder,
/// };
/// use serde_json::json;
///
///# async fn overwrite_payload(client: &Qdrant)
///# -> Result<(), QdrantError> {
/// let payload: Payload = json!({
/// "property1": "string",
/// "property2": "string",
/// })
/// .try_into()
/// .unwrap();
///
/// client
/// .overwrite_payload(
/// SetPayloadPointsBuilder::new("my_collection", payload)
/// .points_selector(PointsSelectorOneOf::Points(PointsIdsList {
/// ids: vec![0.into(), 3.into(), 10.into()],
/// }))
/// .wait(true),
/// )
/// .await?;
///# Ok(())
///# }
/// ```
///
/// Documentation: <https://qdrant.tech/documentation/concepts/payload/#overwrite-payload>
pub async fn overwrite_payload(
&self,
request: impl Into<SetPayloadPoints>,
) -> QdrantResult<PointsOperationResponse> {
let request = &request.into();

self.with_points_client(|mut points_api| async move {
let result = points_api.overwrite_payload(request.clone()).await?;
Ok(result.into_inner())
})
.await
}

/// Delete specified payload keys of points.
///
/// ```no_run
///# use qdrant_client::{Qdrant, QdrantError};
/// use qdrant_client::qdrant::{DeletePayloadPointsBuilder, PointsIdsList};
///
///# async fn delete_payload(client: &Qdrant)
///# -> Result<(), QdrantError> {
/// client
/// .delete_payload(
/// DeletePayloadPointsBuilder::new(
/// "my_collection",
/// vec!["color".to_string(), "price".to_string()],
/// )
/// .points_selector(PointsIdsList {
/// ids: vec![0.into(), 3.into(), 100.into()],
/// })
/// .wait(true),
/// )
/// .await?;
///# Ok(())
///# }
/// ```
///
/// Documentation: <https://qdrant.tech/documentation/concepts/payload/#delete-payload-keys>
pub async fn delete_payload(
&self,
request: impl Into<DeletePayloadPoints>,
) -> QdrantResult<PointsOperationResponse> {
let request = &request.into();

self.with_points_client(|mut points_api| async move {
let result = points_api.delete_payload(request.clone()).await?;
Ok(result.into_inner())
})
.await
}

/// Clear all payload of points.
///
/// ```no_run
///# use qdrant_client::{Qdrant, QdrantError};
/// use qdrant_client::qdrant::{ClearPayloadPointsBuilder, PointsIdsList};
///
///# async fn clear_payload(client: &Qdrant)
///# -> Result<(), QdrantError> {
/// client
/// .clear_payload(ClearPayloadPointsBuilder::new("my_collection").points(
/// PointsIdsList {
/// ids: vec![0.into(), 3.into(), 100.into()],
/// },
/// ))
/// .await?;
///# Ok(())
///# }
/// ```
///
/// Documentation: <https://qdrant.tech/documentation/concepts/payload/#clear-payload>
pub async fn clear_payload(
&self,
request: impl Into<ClearPayloadPoints>,
) -> QdrantResult<PointsOperationResponse> {
let request = &request.into();

self.with_points_client(|mut points_api| async move {
let result = points_api.clear_payload(request.clone()).await?;
Ok(result.into_inner())
})
.await
}
}

0 comments on commit e91e2f3

Please sign in to comment.