Minotauri
CODE

Minotauri

Wertykalna wyszukiwarka branży łazienkowej i kuchennej z własnym crawlerem i własnym indeksem.

PROJECT
WEB-033
INDEKSER
PYTHON 3.12 · FASTAPI · POSTGRES
WYSZUKIWARKA
TAURI 2 · SVELTE · RUST
WERTYKALE
6
JĘZYKI
11
STATUS
W TRAKCIE
DATA
30 sierpnia 2026

Nie nakładka na cudzą wyszukiwarkę. Minotauri sam odwiedza strony, decyduje, czy należą do branży, wyciąga produkty, zdjęcia, aranżacje, firmy i dokumentację, i buduje własny indeks — przeszukiwany offline w milisekundach.

MINOTAURI / CRAWLERODWIEDZANIE · KLASYFIKACJA · INDEKS
INDEKSOWANIE

Każdy rozchodzący się pierścień to jedna odwiedzona strona. Po odwiedzeniu strona dostaje etykietę wertykalu — produkt, aranżacja, firma, dokumentacja — i dopiero wtedy trafia do indeksu; strony spoza branży są odrzucane na tym kroku i nie zajmują miejsca. Licznik po prawej rośnie tylko o te przyjęte, dlatego przyrost jest wolniejszy niż tempo odwiedzin.

SEED3445 domenproduktaranżacjafirmadokumentproduktgrafikaINDEKS517 206 stronODWIEDZONE / h1071W KOLEJCE1 194 534PRZYJĘTE DO INDEKSU19 415 / 24 hODRZUCONEpoza branżą
KLASYFIKACJA DWUSTOPNIOWA: TANIA HEURYSTYKA, A MODEL DOPIERO DLA PRZYPADKÓW NIEPEWNYCH
MINOTAURI / DWA OBIEGIINDEKSER ⟂ WYSZUKIWARKA
NIEZALEŻNE
INDEKSER · PYTHON · POSTGRESSEARCH DESKTOP · TAURI · RUSTŹRÓDŁA01POBRANIE02CZY BRANŻOWA03JĘZYK04EKSTRAKCJA05NORMALIZACJA06ZAPYTANIE01ROZBIÓR02SŁOWNIK03DOPASOWANIE04RANKING05WYNIKI06INDEKS517 206 stron2,0 GiB · gen. v000173ZAPISODCZYTDWA NIEZALEŻNE PRODUKTY W JEDNYM REPOZYTORIUM6 WERTYKALIWWWPRODUKTYGRAFIKAARANŻACJEFIRMYDOKUMENTACJA11 JĘZYKÓW — WSPÓLNY SŁOWNIK BRANŻOWY: deszczownica = rain shower = soffione = RegenduschePLENITESFRRUDECSSKHUDACS/SK rozstrzygane po ř ě ↔ ľ ĺ ŕ
ZATRZYMANIE CRAWLERA NIE ZATRZYMUJE WYSZUKIWANIA · INDEKS JEST JEDYNYM PUNKTEM STYKU OBU PRODUKTÓW
01

PROBLEM

Wyszukiwarki ogólne nie rozumieją branży: zapytanie o deszczownicę zwraca sklepy, blogi i przypadkowe obrazki, a nie porównywalne produkty z kartami katalogowymi. Zawężenie wyników wymaga wiedzy, której wyszukiwarka nie ma, bo jej model świata jest poziomy, nie branżowy.

02

POMYSŁ

Zbudować wyszukiwarkę pionową: własny crawler, własna klasyfikacja przynależności do branży, własna ekstrakcja encji i własny indeks. Rozdzielony na dwa niezależne produkty — indekser i wyszukiwarkę desktopową.

Ten podział jest sednem: zatrzymanie crawlera na tydzień nie zatrzymuje wyszukiwania, bo desktop odpowiada na zapytania z tego, co już zindeksowano, i startuje w milisekundach.

Indeks jest wspólnym kontraktem między dwoma produktami. Dopóki jego format się nie zmienia, crawler i wyszukiwarka rozwijają się niezależnie — można przebudować cały indekser, nie dotykając aplikacji, z której korzysta użytkownik.

03

PROJEKT

Sześć wertykali: WWW, produkty, grafika, aranżacje, firmy i dokumentacja. Jedenaście języków wykrywanych per strona, ze wspólnym słownikiem branżowym — dzięki niemu deszczownica, rain shower, soffione, Regendusche i тропический душ odnajdują się nawzajem.

Ciekawostka implementacyjna: czeski i słowacki dzielą niemal wszystkie słowa funkcyjne, więc rozstrzygnięcie tej pary opiera się na literach wyłącznych dla każdego z nich (ř ě kontra ľ ĺ ŕ), a nie na słownictwie, które mają wspólne.

Ekstrakcja wyciąga ze strony encje branżowe, nie sam tekst: produkty z parametrami, zdjęcia z rolą (produktowe kontra aranżacyjne), firmy i dokumentację techniczną. Każdy wertykal ma własny zestaw pól, bo karta produktu i zdjęcie aranżacyjne wymagają zupełnie innych metadanych.

04

REALIZACJA

Indekser to Python z FastAPI i PostgreSQL, wyszukiwarka to aplikacja Tauri 2 ze Svelte i Rustem — w repozytorium leży zbudowany TauriDesktop.exe. Do rozpoznawania tekstu z dokumentacji dołączone są dane Tesseract dla języków branżowych (polski, rosyjski, hiszpański, włoski, francuski).

Wybór stosu wynika z podziału ról. Indekser jest procesem długo działającym, korzystającym z bazy i sieci — Python nadaje się do tego dobrze. Wyszukiwarka ma startować natychmiast i pracować na lokalnym indeksie, więc dostała Rusta i Tauri: kilkanaście megabajtów zamiast setek i uruchomienie liczone w milisekundach.

Klasyfikacja branżowa działa dwustopniowo — najpierw tania heurystyka na słownictwie i strukturze strony, potem model dla przypadków niepewnych. Puszczanie wszystkiego przez model byłoby kilkukrotnie wolniejsze przy marginalnym zysku na trafności.

05

EFEKT

Rozdzielenie ról okazało się słuszne także wydajnościowo: indekser potrzebuje bazy, sieci i czasem AI, a wyszukiwarka potrzebuje wyłącznie gotowego indeksu. Uruchamia się natychmiast i działa bez połączenia.

06

GALERIA

01 ZDJĘĆ
  • Minotauri — panel administracyjny indeksera: 3445 domen, 517 tys. stron, 152 tys. produktów, 2,5 mln grafik · zrzut z projektu

07

WNIOSKI

Największy koszt nie leży w crawlerze, tylko w klasyfikacji: decyzja „czy ta strona należy do branży” determinuje jakość całego indeksu. Błąd na tym kroku przenosi się na wszystkie kolejne i nie da się go naprawić lepszym rankingiem.

Drugi wniosek dotyczy języków: wspólny słownik branżowy okazał się tańszy i skuteczniejszy niż tłumaczenie zapytań. Zamiast tłumaczyć „deszczownica” na dziesięć języków przy każdym wyszukiwaniu, raz mapujemy pojęcie na zbiór terminów i szukamy ich wszystkich naraz.