use daimon::prelude::*;
#[tokio::main]
async fn main() -> daimon::Result<()> {
const DIM: usize = 4;
let store = OpenSearchVectorStoreBuilder::new("http://localhost:9200", DIM)
.index("rag_docs")
.space_type(OpenSearchSpaceType::CosineSimilarity)
.engine(OpenSearchEngine::Lucene)
.build()
.await?;
store
.upsert(
"doc-1",
vec![0.1, 0.2, 0.3, 0.4],
Document::new("Rust is a systems programming language focused on safety.")
.with_metadata("source", json!("handbook")),
)
.await?;
store
.upsert(
"doc-2",
vec![0.9, 0.1, 0.0, 0.2],
Document::new("Tokio is an asynchronous runtime for Rust."),
)
.await?;
let query_embedding = vec![0.12, 0.18, 0.28, 0.42];
let results = store.query(query_embedding, 2).await?;
println!("Top {} matches:", results.len());
for (rank, scored) in results.iter().enumerate() {
println!(
"{}. (score {:.4}) {}",
rank + 1,
scored.score,
scored.document.content
);
}
Ok(())
}