github vavallee/bindery v0.4.0
v0.4.0 — Search Overhaul

latest releases: v1.15.3, v1.15.2, v1.15.1...
one month ago

Fixes the long-standing "short titles get junk results" problem (e.g. searching "The Sparrow" by Mary Doria Russell no longer returns unrelated sparrow-themed books, comics, and music releases). Inspired by matching patterns in Readarr, Sonarr, and LazyLibrarian.

Added

  • Four-tier query fallback in BookSearch: t=booksurname+titleauthor+title → title-only. The new surname+title tier disambiguates short titles without the noise of full-name queries that some indexers fail to match.
  • Word-boundary keyword matching (\b...\b) everywhere in the filter and language checks. sparrow no longer leaks into sparrowhawk or sparrows.
  • Contiguous-phrase matching for multi-word titles. A release must contain the title words together; scattered occurrences no longer pass.
  • Subtitle handling for Title: Subtitle books. "Dune: Messiah" accepts releases tagged as either "Dune" or "Dune Messiah".
  • Composite ranking score: quality × 100 + edition tag (RETAIL +50, UNABRIDGED +30, ABRIDGED −50) + year-match (±20/10/5) + log₁₀(grabs) × 10 + size tiebreaker + ISBN exact-match +200.
  • Release parser (internal/indexer/release.go): extracts year, format, RETAIL/UNABRIDGED/ABRIDGED flags, release group, and ISBN from NZB titles.
  • Blocklist consulted during search (both manual and auto-grab). The infrastructure existed but was never wired into the search flow.
  • Download quality populated on grab via the new release parser.
  • 23 new unit tests covering the matching and ranking pipeline.

Fixed

  • Scheduler now resolves and passes the book's author name to SearchBook (previously always empty, which silently disabled the t=book tier, the author+title tier, and the filter's surname anchor for every automated search).
  • Foreign-language tag filter now word-boundary-anchored. The tag RUSSE (French for "Russian") was substring-matching inside RUSSELL, causing books by authors named Russell, Russ, Russo, etc. to be rejected as Russian-language releases.

Changed

  • Searcher.SearchBook signature: now takes MatchCriteria{Title, Author, Year, ISBN} instead of (title, author) so ranking can use year and ISBN signals.

Deliberately out of scope

  • qBittorrent grab path and Download.Protocol handling (bigger refactor planned separately).
  • Readarr-style user-facing Quality Profiles (overkill for a single-user tool; hardcoded weights serve 95% of cases).

Image: ghcr.io/vavallee/bindery:v0.4.0
Full changelog: https://github.com/vavallee/bindery/blob/main/CHANGELOG.md

Don't miss a new bindery release

NewReleases is sending notifications on new releases.