Summary
Adds a relevance gate to the two automatic-search paths so they stop queuing downloads that merely share a surname or a common word with the audiobook — e.g. a Patterson Hood concert recording matched to a James Patterson audiobook, or a different Dickens novel matched on the author's name. The gate judges whether the release names the book; it fails open when it cannot judge, and manual search keeps the old behavior so users browsing results still see everything.
Changes
Added
AutomaticSearchRelevanceGate(Search/Filters/), a standalone class — deliberately not anISearchResultFilter. TheSearchResultFilterPipelinefilters are tuned for metadata-page results and reject legitimate raw indexer releases ("The Lord of the Rings" → product-like "ring", "Man's Search for Meaning" → promotional "search"), so the automatic paths run this gate alone and never consult the pipeline.- How a result is judged (
Evaluate, returns aRelevanceVerdictwith the reason and both scores for the log line):- Title on its own. The audiobook's main title (the part before a subtitle separator —
:,;,-,(,[) or its full title must reach 50% of its significant tokens in the result's title. TheArtistfield never supplies title evidence, and a leading artist credit in the title ("Frank Herbert - Dune") is stripped before the title is judged (unless that prefix is the book's title, as when Torznab infersArtistfrom a title-first release), so an author's name can never stand in for a missing title word: "Charles Dickens - Oliver Twist" is rejected for David Copperfield, and a long stored subtitle ("Good Omens: The Nice and Accurate Prophecies of Agnes Nutter, Witch") cannot dilute "Good Omens [M4B]". - Author corroboration for generic matches. A match that rests on a single shared title word additional...
- Title on its own. The audiobook's main title (the part before a subtitle separator —
Automated Canary build