zvec-bindings 0.4.1

Idiomatic Rust bindings for zvec vector database
use zvec_bindings::{create_and_open, CollectionSchema, Doc, VectorQuery, VectorSchema};

fn main() -> zvec_bindings::Result<()> {
    let path = "./zvec_example_db";

    let mut schema = CollectionSchema::new("example");
    schema.add_field(VectorSchema::fp32("embedding", 4))?;

    let collection = create_and_open(path, schema)?;

    let mut doc1 = Doc::id("doc_1");
    doc1.set_vector("embedding", &[0.1, 0.2, 0.3, 0.4])?;

    let mut doc2 = Doc::id("doc_2");
    doc2.set_vector("embedding", &[0.2, 0.3, 0.4, 0.1])?;

    let mut doc3 = Doc::id("doc_3");
    doc3.set_vector("embedding", &[0.3, 0.4, 0.1, 0.2])?;

    let docs = vec![doc1, doc2, doc3];

    let results = collection.insert(&docs)?;
    println!("Inserted {} documents", results.len());

    let query = VectorQuery::new("embedding")
        .topk(10)
        .vector(&[0.4, 0.3, 0.3, 0.1])?;

    let search_results = collection.query(query)?;

    println!("Search results:");
    for doc in search_results.iter() {
        println!("  id={}, score={:.4}", doc.pk(), doc.score());
    }

    collection.flush()?;

    Ok(())
}