use oramacore_client::collection::{CollectionManager, CollectionManagerConfig};
use oramacore_client::error::Result;
use oramacore_client::types::{SearchMode, SearchParams};
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
struct Document {
id: String,
title: String,
content: String,
category: String,
}
#[tokio::main]
async fn main() -> Result<()> {
let config = CollectionManagerConfig::new("your-collection-id", "your-api-key");
let client = CollectionManager::new(config).await?;
println!("=== Basic Text Search ===");
let search_params = SearchParams::new("artificial intelligence")
.with_mode(SearchMode::Fulltext)
.with_limit(5);
let results = client.search::<Document>(&search_params).await?;
println!("Found {} documents", results.hits.len());
for hit in &results.hits {
println!("- {} (score: {:.4})", hit.document.title, hit.score);
}
println!("\n=== Vector Search ===");
let vector_search = SearchParams::new("machine learning algorithms")
.with_mode(SearchMode::Vector)
.with_limit(3)
.with_properties(vec!["title".to_string(), "content".to_string()]);
let vector_results = client.search::<Document>(&vector_search).await?;
println!(
"Vector search found {} documents",
vector_results.hits.len()
);
for hit in &vector_results.hits {
println!("- {} (similarity: {:.4})", hit.document.title, hit.score);
}
println!("\n=== Hybrid Search ===");
let hybrid_search = SearchParams::new("deep learning")
.with_mode(SearchMode::Hybrid)
.with_limit(10)
.with_threshold(0.7);
let hybrid_results = client.search::<Document>(&hybrid_search).await?;
println!(
"Hybrid search found {} documents",
hybrid_results.hits.len()
);
if let Some(elapsed) = &hybrid_results.elapsed {
println!("Search completed in {}", elapsed.formatted);
}
println!("\n=== Filtered Search ===");
let mut where_clause = serde_json::Map::new();
where_clause.insert("category".to_string(), serde_json::json!("technology"));
let filtered_search = SearchParams::new("neural networks")
.with_mode(SearchMode::Fulltext)
.with_where(serde_json::Value::Object(where_clause))
.with_limit(5);
let filtered_results = client.search::<Document>(&filtered_search).await?;
println!(
"Filtered search found {} documents",
filtered_results.hits.len()
);
Ok(())
}