Tinysearch est un moteur de recherche léger, rapide et complet. Il est conçu pour les sites Web statiques.
Tinysearch est écrit en rouille, puis compilé sur WebAssembly pour fonctionner dans un navigateur.
Il peut être utilisé avec des générateurs de sites statiques tels que Jekyll, Hugo, Zola, Cobalt ou Pelican.

Le fichier d'index de test de mon blog avec environ 40 articles crée une charge utile de WASM de 99KB (49KB GZIPIP, 40KB Brotli).
Qui est plus petit que l'image de démonstration ci-dessus; Alors oui.
Tinysearch est un port Rust / Wasm du code Python de l'article "Écrivant un moteur de recherche en texte intégral à l'aide de filtres Bloom". Il peut être considéré comme une alternative à Lunr.js et ElasticLunr, qui sont trop lourds pour les petits sites Web et chargent beaucoup de JavaScript.
Sous le capot, il utilise un filtre XOR - une datastructure pour une approximation rapide de l'adhésion SET qui est plus petite que les filtres Bloom et Cuckoo. Chaque article de blog est converti en un filtre qui sera ensuite sérialisé en blob binaire à l'aide de bincode. Veuillez noter que les technologies sous-jacentes sont susceptibles de changer.
WASM-Pack est nécessaire pour construire le module WASM. L'installer avec
cargo install wasm-packPour optimiser la sortie JavaScript, vous aurez également besoin de TERSER:
npm install terser -g
Si vous souhaitez rendre le Webassembly aussi petit que possible, nous vous recommandons également d'installer Binaryen. Sur macOS, vous pouvez l'installer avec Homebrew:
brew install binaryenAlternativement, vous pouvez télécharger le binaire à partir de la page de version ou utiliser votre gestionnaire de packages OS.
Après cela, vous pouvez installer Tinysearch lui-même:
cargo install tinysearch
Un fichier JSON, qui contient le contenu à indexer, est requis comme entrée. Veuillez consulter l'exemple de fichier.
Le champ body dans le document JSON est facultatif et peut être ignoré pour simplement indexer les titres de publication.
Une fois que vous avez créé l'index, vous pouvez exécuter
tinysearch fixtures/index.json
Cela créera un module WASM et le code de colle JavaScript pour l'intégrer dans votre site Web. Vous pouvez ouvrir la demo.html de n'importe quel serveur Web pour voir le résultat.
Par exemple, Python a un serveur Web intégré qui peut être utilisé pour un test rapide:
python3 -m http.server
Ensuite, accédez à http://0.0.0.0:8000/demo.html pour exécuter la démo.
Vous pouvez également jeter un œil aux exemples de code pour différents générateurs de sites statiques ici.
Pour les options d'utilisation avancées, exécutez
tinysearch --help
Veuillez vérifier ce qui est nécessaire pour héberger WebAssembly en production - vous devrez définir explicitement les types GZIP MIME.
Si vous n'avez pas de configuration de rouille complète disponible, vous pouvez également utiliser nos images Docker de construction nocturne.
Voici comment essayer rapidement Tinysearch avec Docker:
# Download a sample blog index from endler.dev
curl -O https://raw.githubusercontent.com/tinysearch/tinysearch/master/fixtures/index.json
# Create the WASM output
docker run -v $PWD :/app tinysearch/cli --engine-version path= " /engine " --path /app/wasm_output /app/index.jsonPar défaut, l'image de rouille alpine la plus récente la plus récente est utilisée. Pour passer tous les soirs, courez
docker build --build-arg RUST_IMAGE=rustlang/rust:nightly-alpine -t tinysearch/cli:nightly .WASM_REPO : écraser le référentiel WasM-PackWASM_BRANCH : écraser la branche du référentiel à utiliserTINY_REPO : dépôt d'écrasement de tinysearchTINY_BRANCH : branche d'écrasement de tinysearch Pour intégrer TinySearch dans des pipelines de déploiement continu, une action GitHub est disponible.
- name : Build tinysearch
uses : leonhfr/tinysearch-action@v1
with :
index : public/index.json
output_dir : public/wasm
output_types : |
wasm Les sites Web suivants utilisent TinySearch:
Utilisez-vous aussi TinySearch? Ajoutez votre site ici!
Tinysearch est autorisé sous l'un ou l'autre des
à votre option.