algolia-recommend-rs 0.0.4

Async Rust client for Algolia Recommend API (unofficial)
Documentation

Algolia Recommend Rust Client

📦 Install

$ cargo add algolia-recommend-rs

⚡️ Quick start

use algolia_recommend_rs::{RecommendClient, models::{RecommendRequest, Model, TrendingFacetsRequest}};
use serde::Deserialize;

#[derive(Debug, Deserialize)]
struct Product {
    title: Option<String>,
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = RecommendClient::new("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY");

    // Build recommendation requests
    let requests = vec![
        RecommendRequest {
            index_name: "products".to_string(),
            model: Model::BoughtTogether,
            object_id: Some("example-object-id".to_string()),
            threshold: Some(0),
            max_recommendations: None,
            facet_name: None,
            query_parameters: None,
        },
        RecommendRequest {
            index_name: "products".to_string(),
            model: Model::TrendingItems,
            object_id: None,
            threshold: Some(0),
            max_recommendations: None,
            facet_name: None,
            query_parameters: None,
        },
    ];

    // Fetch recommendations
    let recs = client.get_recommendations::<Product>(requests).await?;
    println!("results: {}", recs.results.len());

    for result in recs.results.iter() {
        for hit in result.hits.iter() {
            println!("objectID={} score={:?}", hit.object_id, hit.score);
        }
    }

    // Fetch trending facets
    let trending = client
        .get_trending_facets(vec![TrendingFacetsRequest::new("products", "category")])
        .await?;
    println!("trending results: {}", trending.results.len());

    Ok(())
}

🦀 Notes

  • The library is lenient in (de)serialization to stay forward-compatible with Algolia responses.
  • Provide queryParameters via RecommendRequest.query_parameters / TrendingFacetsRequest.query_parameters as raw JSON.

📜 License

MIT