Zpět

Vyhledávač Adres (RÚIAN)

Školní projekt
RustLeptosWebAssemblyDocker

Proč jsem projekt vypracoval?

Tento projekt byl vypracován jako závěrečný projekt na střední škole v rámci předmětu databáze.

Cíl projektu

Cílem projektu bylo vytvořit vyhledávač adres v České republice nad daty z RÚIAN. Aplikace by měla fungovat pod 500ms na request, ale v ideálním případě pod 60ms. Dále je potřeba, aby šla najít každá adresa v republice včetně všechn edge casů.

Řešení

Postavil jsem webovou aplikaci v Rustu napojenou na Maria DB. Využil jsem leptos pro frontend a sqlx pro databázi.

Nejsložitější součást projektu tohoto projektu byl návrh databáze. Klíčovým rozhodnutím bylo využít FULLTEXT INDEX nad pomocným sloupcem search.

Výsledná query tedy vypadala následovně:

SELECT <adresa>
FROM adresy
WHERE MATCH(search) AGAINST('+praha*' '+hlavn*' '+xxx138*' IN BOOLEAN MODE)
ORDER BY cislo_domovni = 138 DESC, cislo_orientacni = 138 DESC
LIMIT 20;

Všechny slova/čísla jsem očistil o háčky a čárky a čísla jsem prodloužil o xxx, aby se počítali do fulltext search. Například 138 se změnilo na xxx138.

Pomocí order by jsem docílil toho, že adresy s přesným číslem 138 budou výše, než čísla, která pouze začíná na 138.