diff --git a/app/connectors/direct_scrapers/hqporner.py b/app/connectors/direct_scrapers/hqporner.py index cc5bd62..7139af2 100644 --- a/app/connectors/direct_scrapers/hqporner.py +++ b/app/connectors/direct_scrapers/hqporner.py @@ -47,8 +47,12 @@ class HQPornerScraper(BaseDirectTubeScraper): log.debug("hqporner search %s status=%d", url, r.status_code) return - # Filtr: slug musi zawierać przynajmniej jedno z słów query (case-insensitive) - # Eliminuje totalnie niezwiązane wyniki gdy fuzzy search szumi. + # Filtr: slug musi zawierać WSZYSTKIE słowa query (≥3 znaki), case-insensitive. + # Wcześniej `any` (≥1 token) → przy 2-słownych nazwach match na jednym pospolitym + # tokenie (np. "anna"/"mia") atrybutował scenę do KAŻDEGO performera dzielącego ten + # token → sceny z setkami błędnych aktorek (do 503; hqporner = 5659/5897 takich scen, + # bug-report 2026-06-07). `all` wymaga pełnego dopasowania nazwy → precyzja. + # Pojedyncze nazwy ("Belladonna") nadal działają (jeden token musi być). query_tokens = {tok for tok in query.lower().split() if len(tok) >= 3} seen_urls: set[str] = set() @@ -63,7 +67,7 @@ class HQPornerScraper(BaseDirectTubeScraper): # Title-token filter slug_lower = slug_part.lower() - if query_tokens and not any(tok in slug_lower for tok in query_tokens): + if query_tokens and not all(tok in slug_lower for tok in query_tokens): continue title = slug_part.replace("_", " ").replace("-", " ").strip()