Refactor vector search to utilize Qdrant VectorDB

This commit is contained in:
Riz Ashraf committed 2026-09-30 14:37:41 +01:00
1 parent 61c0e88ad8
commit 3add6c3d31
4 files changed
+99 -31

No files matched your search

+47 -5
View File
@@ -3,7 +3,7 @@ use qdrant_client::Qdrant;
use std::sync::Arc;
use std::error::Error;
use uuid::Uuid;
use log::{info, error};
use tracing::{info, error};
use serde::{Deserialize, Serialize};
#[derive(Clone)]
@@ -69,10 +69,10 @@ impl VectorDB {
}
};
let mut payload = std::collections::HashMap::new();
payload.insert("doc_type".to_string(), doc_type.into());
payload.insert("text".to_string(), text.into());
payload.insert("original_id".to_string(), id.into());
let mut payload: std::collections::HashMap<String, serde_json::Value> = std::collections::HashMap::new();
payload.insert("doc_type".to_string(), serde_json::Value::String(doc_type.to_string()));
payload.insert("text".to_string(), serde_json::Value::String(text.to_string()));
payload.insert("original_id".to_string(), serde_json::Value::String(id.to_string()));
let point = PointStruct::new(point_id, vector, payload);
@@ -82,4 +82,46 @@ impl VectorDB {
Ok(())
}
pub async fn search(
&self,
query_vector: Vec<f32>,
limit: u64,
) -> Result<Vec<VectorSearchResult>, Box<dyn Error + Send + Sync>> {
use qdrant_client::qdrant::SearchPointsBuilder;
let search_result = self.client
.search_points(
SearchPointsBuilder::new(&self.collection_name, query_vector, limit)
.with_payload(true)
)
.await?;
let mut results = Vec::new();
for point in search_result.result {
let id = point.payload.get("original_id")
.and_then(|v| v.as_str())
.map(|s| s.to_string())
.unwrap_or_default();
let doc_type = point.payload.get("doc_type")
.and_then(|v| v.as_str())
.map(|s| s.to_string())
.unwrap_or_default();
let text = point.payload.get("text")
.and_then(|v| v.as_str())
.map(|s| s.to_string())
.unwrap_or_default();
results.push(VectorSearchResult {
id,
doc_type,
text,
score: point.score,
});
}
Ok(results)
}
}