Po více než dvaceti letech psaní publikačních systémů je bytostně nenávidím všechny. Proto je většina mých nových webů jenom hromada statických souborů v Markdownu, které nějaká utilitka přežvýká do HTML. Má to spoustu výhod: můžete to jednoduše hostovat kdekoliv (tento web je hostovaný na GitHubu), většinou zadarmo, dost dobře se to nedá hacknout, nulová údržba... Ale nevýhodou je, že se na takovém webu špatně dělá vyhledávání.

Od počátku existence tohoto blogu jsem zde používal Google Custom Search (dnes Programmable Search Engine). To ale mělo několik nevýhod. Indexovalo si to co chtělo a kdy chtělo, neměl jsem nad tím kontrolu, vkládalo to reklamy a bylo to od Google.

Co kdybych si napsal vlastní fulltextový vyhledávač? Není to tak těžké, jak to na první pohled vypadá, protože heavy lifting, vlastní fulltextové vyhledávání, za mne může udělat Microsoft SQL Server. Stačí napsat nějaký crawler, který nacpe statické texty do databáze a nějaké API, které umožní zobrazit výsledky.

Projekt Incitatus

Tak vznikl projekt s označením Incitatus. Je to custom indexovací engine pro web. Na rozdíl od běžného vyhledávače vychází z předpokladu, že s ním prohledávaný web bude aktivně spolupracovat:

Celá ta věc se bude ovládat přes API. Nemá žádné lidsky čitelné rozhraní, jenom REST API, pomocí kterých lze spravovat jednotlivé prohledávané weby a také posílat fulltextové dotazy a číst výsledky.

Statický web pak potom bude toto API volat z JavaScriptu. Můžete si to vyzkoušet na tomto blogu.

Zdrojové kódy najdete na mém GitHubu. Na YouTube kanálu Z-TECH najdete playlist, který tento projekt popisuje ve čtyřech videích.

Stahování dat

V prvním dílu seriálu vám předvedu část na stahování prohledávaných webů. Nejprve stáhneme (a proparsujeme) sitemap soubory, abychom zjistili jaké stránky budeme indexovat (které se změnily nebo nově přibyly od posledního indexování). Poté stáhneme konkrétní stránky a jejich obsah uložíme do databáze.

Fulltext v SQL Serveru

Ve druhém dílu vám ukážu, jak napasovat fulltext v Microsoft SQL Serveru na Entity Framework Core. Také napíšu překladač z lidsky pochopitelné syntaxe dotazů do té, které rozumí SQL Server.

Zabezpečení API

Třetí díl seriálu o tvorbě vlastního fulltextového vyhledávače popisuje, jak dosud anonymní API pro správu indexovaných webů zabezpečit pomocí API klíče předávaného jako bearer token.

JavaScript klient a CORS

V závěrečném dílu seriálu o tvorbě vlastního fulltextového vyhledávače konečně napojíme indexovaný statický web na náš vyhledávací server pomocí klientského JavaScriptu. Také si ukážeme, jak pomocí CORS nastavit, z jakých domén lze API volat.

Omezení a možnosti rozšíření do budoucna