Tinysearch, un moteur de recherche pour sites webs statiques🔗

Posted by Médéric Ribreux 🗓 In blog/ Blog/

#auto-hébergement #decentralized #web

Introduction

Depuis un mois, le site web que vous lisez utilise tinysearch, un moteur de recherche pour sites web statiques, en lieu et place d'une redirection vers un truc de chez google. Même si ce n'est pas parfait car il y a beaucoup de faux positifs ou de choses qui ne remontent pas bien dans cette recherche, on va dire que ça va le faire.

Avant, tout passait chez google et en 2021, tout le monde sait que Google, c'est le mal. Et puis, pour un site web statique, franchement, avoir un index local, c'est pas plus mal. Néanmoins, sa mise en place a été assez peu simple. Je pense qu'il est quand même temps de faire un retour sur tout ça.

Comment ça marche ?

Globalement dans ce que j'ai compris, tinysearch marche de la manière suivante:

Ça m'a semblé très intéressant comme solution pour les motifs suivants:

Comment je l'ai installé ?

Je me suis mis à l'installer directement, c'est à dire en mode bare-metal. Franchement utiliser docker pour construire et faire tourner un utilitaire en ligne de commande, c'est overkilling.

J'ai découvert au passage le bordel de l'intégration de Rust dans les distributions GNU/Linux. Globalement, Rust a ses dépôts sur un site web, peu de packages sont intégrés nativement dans Debian. Quand on lance la récupération des dépendances, on a l'impression qu'il te réinstalle l'équivalent de la libc + 10000 autres paquets dans ~/.cargo qui du coup fait 500Mo chez moi (ce qui est énorme pour juste une commande). Bref, moins intégré tu peux pas et c'est dommage. C'est peut-être la raison d'être du Docker au final.

Attention, je ne crache pas sur Debian: les développeurs et les mainteneurs font un excellent travail. C'est dommage que Rust n'ai pas prévu plus de facilité pour que les paquets soient facilement gérés dans d'autres distributions. Mais ce n'est que la vision simpliste que j'ai pour l'instant, n'étant pas développeur Rust.

Voilà ce que j'ai balancé pour le construire:

apt install cargo binaryen libstd-rust-dev-wasm32
export PATH="/home/medspx/.cargo/bin:$PATH"
cargo install wasm-pack
git clone https://github.com/tinysearch/tinysearch.git
cd tinysearch
cargo build --release

Dans la pratique, j'ai ajouté .carbo dans mon PATH. C'est pratique et pas cher.

Comment je l'ai intégré ?

Il me restait surtout à générer le fichier JSON de configuration/contenu de l'index. J'ai fait un script Python pour ça, il vaut ce qu'il vaut et il est très adapté à mon cas d'utilisation personnelle. Mais il fait le job.

Conclusions

Bon, ce n'est pas parfait. J'ai pas mal de choses qui déconnent:

Toutefois, à l'usage, c'est très rapide: taper un mot retourne des choses en quelques micro-secondes. Ensuite, l'index du site reste assez simple et de taille raisonnable.

Pour l'instant, ça va rester comme ça. Je n'ai pas le temps de modifier tinysearch pour l'adapter à mes besoins (notamment, à la langue française en excluant des mots de base comme le,la,les).

Au moins, ça me permet de ne plus dépendre de Google comme moteur de recherche sur mon site web personnel et ça, c'est déjà énorme en soi…