Tinysearch, un moteur de recherche pour sites webs statiques 🔗

Posted by MĂ©dĂ©ric Ribreux 🗓 In blog/Blog/

#web #auto-hébergement #decentralized

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...