VYHLEDÁVÁNÍ - KOMPLETNÍ POPIS ============================= ## 1. PŘÍPRAVA VYHLEDÁVACÍ FRÁZE Soubor: /mnt/app/prehrajto.cz/libs/Atreo/Model/Video.php:207-234 ### Odstranění speciálních znaků (řádky 207-227): - Nahrazení za mezery: ! + - && || ( ) [ ] { } ^ ? ~ " : * \ - Normalizace mezer ## 2. NORMALIZAČNÍ FUNKCE Soubor: /mnt/app/prehrajto.cz/libs/Atreo/Video/VideoNameFilter.php ### stripInfoParts() (řádky 318-332): Odstraňuje: - " cz", " sk" na konci - "cz ", "sk ", "czdab " na začátku - Rok (1950 až aktuální) pokud je dál než 5. pozice ### stripInfoPartsNoYear() (řádky 299-316): Odstraňuje stejné věci jako stripInfoParts, ale ne rok ### stripYear() (řádky 334-347): Odstraňuje rok 1950-aktuální rok ### prepare() - základní čištění ### removeAccent() - odstranění diakritiky ### episodeReplacer() - převod formátů epizod ### seriesWordReplacer() - "druha rada" → "s02" ## 3. ELASTICSEARCH KONFIGURACE Soubor: /mnt/app/prehrajto.cz/libs/Atreo/Console/ElasticSearchInit.php:1060-1102 ### Analyzer pro vyhledávání: - Tokenizer: whitespace - Filtry: lowercase, stopwords_CZ, stopwords_EN, asciifolding, synonym, cs (Hunspell) - Stopwords CZ: že, r, v, t, q, r, s, p, f, g, l, k, j, h - Stopwords EN: the - Synonyma (pouze tyto 4): - cy → cz - dabink → dabing - tricet → 30 - dvacet → 20 ## 4. VÝPOČET viewsTop SKÓRE Soubor: /mnt/app/prehrajto.cz/libs/Atreo/Console/ElasticSearchInit.php:608-799 ### Normalizace názvu pro kategorie (řádky 615-649): - removeAccent + prepare + lowercase - Detekce dabingu/titulků (czdab, cz dab, skdab, cztit, etc.) - stripInfoParts() + zachování info o dabingu ### Výpočet skóre: 1. Základ (řádky 653-657): - mb = velikost / 1024 / 1024 - min = délka / 60 (minimum 40) - viewsTop = (mb / min) * (mb / min) 2. Redukce (řádky 658-679): - Pokud > 100: * 0.8 - Pokud > 150: * 0.8 - Pokud > 200: * 0.8 - Pokud > 250: * 0.7 - Pokud > 300: * 0.6 - Maximum: 500 3. Palce (řádky 686-687): - viewsTop += (thumbsUp * 75) - viewsTop -= (thumbsDown * 125) 4. HD (řádky 691-693): - Pokud cdn1080 nebo cdn720: viewsTop += viewsTop * 4 5. Čas (řádky 697-714): - Pokud createdAt < 14 dní nebo má thumbsUp: * 1.5 - Pokud createdAt > 30 dní: * 0.8 - Pokud createdAt > 50 dní: * 0.8 6. Reporty (řádky 720-722): - Pokud je v videoReportedScore: viewsTop = 0 7. Views (řádky 724-727): - Pokud normalViews > 500: += 300 8. Kategorie (řádky 731-780): - Pokud bestRationVideo: += viewsTop * 1.7 - Pokud bestQualityVideo: += viewsTop * 1.7 - Penalizace duplikátů: - Stejné MD5 s titulky: / 6 - Stejné MD5 bez titulků: / 2 - Různé MD5 s titulky: / 5 9. Jazyk (řádky 783-797): - Český dabing: * 1.5 - Titulky > 1500: * 0.2 - Titulky ostatní: * 0.12 ## 5. CRON - Každých 5 minut: atreo:elasticsearch-init --search - Přepočítá viewsTop skóre pro všechna videa - Vytvoří nový ElasticSearch index s předpočítanými hodnotami ## PŘÍKLADY VÝPOČTU: ### Příklad 1: HD film s dabingem - Velikost: 4096 MB, délka: 120 minut - Palce: 50 nahoru, 5 dolů - HD: ano (1080p) - Stáří: 10 dní - Dabing: český Výpočet: 1. Základ: (4096/120)² = 1165 2. Redukce > 500: 500 3. Palce: 500 + (50*75) - (5*125) = 3625 4. HD: 3625 + 3625*4 = 18125 5. Čas < 14 dní: 18125 * 1.5 = 27187 6. Dabing: 27187 * 1.5 = 40780 ### Příklad 2: Starý film s titulky - Velikost: 700 MB, délka: 90 minut - Palce: 10 nahoru, 20 dolů - HD: ne - Stáří: 60 dní - Titulky: české Výpočet: 1. Základ: (700/90)² = 60 2. Palce: 60 + (10*75) - (20*125) = -1690 (záporné!) 3. HD: ne, zůstává -1690 4. Čas > 30 dní: -1690 * 0.8 = -1352 5. Čas > 50 dní: -1352 * 0.8 = -1081 6. Titulky: -1081 * 0.12 = -129 ### Příklad 3: Nový seriál bez hodnocení - Velikost: 350 MB, délka: 45 minut - Palce: 0 nahoru, 0 dolů - HD: ne - Stáří: 5 dní - Views: 600 Výpočet: 1. Základ: (350/45)² = 60 2. Palce: 60 + 0 - 0 = 60 3. HD: ne, zůstává 60 4. Čas < 14 dní: 60 * 1.5 = 90 5. Views > 500: 90 + 300 = 390