Skip to main content

semtree_rag/
search.rs

1use std::sync::Arc;
2
3use semtree_embed::Embedder;
4use semtree_store::{Hit, VectorStore};
5
6use crate::RagError;
7
8pub struct SearchEngine {
9    embedder: Arc<dyn Embedder>,
10    store: Arc<dyn VectorStore>,
11}
12
13impl SearchEngine {
14    pub fn new(embedder: Arc<dyn Embedder>, store: Arc<dyn VectorStore>) -> Self {
15        Self { embedder, store }
16    }
17
18    pub async fn search(&self, query: &str, top_k: usize) -> Result<Vec<Hit>, RagError> {
19        let embedding = self.embedder.embed_one(query).await?;
20        let hits = self.store.search(&embedding, top_k).await?;
21        Ok(hits)
22    }
23}