zantetsu-vecdb 0.1.4

Canonical anime title matching via Kitsu dumps or remote endpoints
Documentation
# zantetsu-vecdb

Canonical title matching for parsed anime names.

## Crates

- [`zantetsu`]https://crates.io/crates/zantetsu - unified API surface
- [`zantetsu-core`]https://crates.io/crates/zantetsu-core - parsing engine
- [`zantetsu-vecdb`]https://crates.io/crates/zantetsu-vecdb - canonical title matching
- [`zantetsu-trainer`]https://crates.io/crates/zantetsu-trainer - training workflows
- [`zantetsu-ffi`]https://crates.io/crates/zantetsu-ffi - Node/Python/C bindings

## Features

- **Local Kitsu Dumps**: Read `latest.sql` or `latest.sql.gz` directly from the `kitsu-sync` dump directory
- **Remote Endpoint**: Query a remote GraphQL endpoint when the client prefers live API data
- **Fuzzy Matching**: Score aliases locally so the crate API stays consistent across both backends
- **Canonical IDs**: Return Kitsu, AniList-compatible, and MAL ids when they are available

## Usage

```rust
use zantetsu_vecdb::{MatchSource, TitleMatcher};

let matcher = TitleMatcher::new(MatchSource::kitsu_dump(
    "/home/user/.local/share/zantetsu/kitsu-dumps",
))
.unwrap();

let best = matcher.match_title("spy x family").unwrap().unwrap();
assert_eq!(best.canonical_title, "Spy x Family");
```

```rust
use zantetsu_vecdb::{MatchSource, TitleMatcher};

let matcher = TitleMatcher::new(MatchSource::remote_endpoint("https://graphql.anilist.co")).unwrap();
let best = matcher.match_title("Sousou no Frieren").unwrap().unwrap();
println!("{} ({:.2})", best.canonical_title, best.score);
```

## License

MIT