Refactor vector search to utilize Qdrant VectorDB
This commit is contained in:
1 parent
61c0e88ad8
commit
3add6c3d31
4 files changed
+99
-31
No files matched your search
+47
-5
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user