Tinysearch ist eine leichte, schnelle Suchmaschine mit Volltext. Es ist für statische Websites ausgelegt.
Tinysearch ist in Rost geschrieben und dann mit WebAssembly zusammengestellt, um in einem Browser zu laufen.
Es kann zusammen mit statischen Site -Generatoren wie Jekyll, Hugo, Zola, Cobalt oder Pelican verwendet werden.

Die Testindexdatei meines Blogs mit rund 40 Posts erstellt eine WASM -Nutzlast von 99 KB (49 KB Gziped, 40 KB Brotli).
Das ist kleiner als das Demo -Bild oben; Also ja.
Tinysearch ist ein Rost/WASM-Port des Python-Code aus dem Artikel "Schreiben einer Volltext-Suchmaschine mit Bloom-Filtern". Es kann als Alternative zu Lunr.js und Elasticlunr angesehen werden, die für kleinere Websites zu schwer sind und viel JavaScript laden.
Unter der Motorhaube verwendet es einen XOR -Filter - eine Datenstruktur zur schnellen Annäherung an die festgelegte Mitgliedschaft, die kleiner als Bloom- und Kuckucksfilter ist. Jeder Blog -Beitrag wird in einen Filter umgewandelt, der dann mit Bincode in einen binären Blob serialisiert wird. Bitte beachten Sie, dass sich die zugrunde liegenden Technologien ändern können.
Das WASM-Pack ist erforderlich, um das WASM-Modul zu erstellen. Installieren Sie es mit
cargo install wasm-packUm die JavaScript -Ausgabe zu optimieren, benötigen Sie auch Terser:
npm install terser -g
Wenn Sie die WebAssembly so klein wie möglich gestalten möchten, empfehlen wir auch, Binaryen zu installieren. Auf macOS können Sie es mit Homebrew installieren:
brew install binaryenAlternativ können Sie die Binärdatei von der Release -Seite herunterladen oder Ihren Betriebssystempaketmanager verwenden.
Danach können Sie Tinysearch selbst installieren:
cargo install tinysearch
Als Eingabe wird eine JSON -Datei, die den Index zu Index enthält, benötigt. Bitte werfen Sie einen Blick auf die Beispieldatei.
Das body im JSON -Dokument ist optional und kann auf nur Index -Post -Titel übersprungen werden.
Sobald Sie den Index erstellt haben, können Sie ausführen
tinysearch fixtures/index.json
Dadurch wird ein WASM -Modul und der JavaScript -Klebercode erstellt, um ihn in Ihre Website zu integrieren. Sie können die demo.html von jedem Webserver öffnen, um das Ergebnis zu sehen.
Zum Beispiel verfügt Python über einen integrierten Webserver, der für einen kurzen Test verwendet werden kann:
python3 -m http.server
Dann stöbern Sie zu http://0.0.0.0:8000/demo.html, um die Demo durchzuführen.
Sie können sich auch die Codebeispiele für verschiedene statische Site -Generatoren ansehen.
Für fortgeschrittene Nutzungsoptionen führen Sie aus
tinysearch --help
Bitte überprüfen Sie, was erforderlich ist, um WebAssembly in der Produktion zu hosten - Sie müssen explizit Gzip -MIME -Typen festlegen.
Wenn Sie kein volles Rost-Setup zur Verfügung haben, können Sie auch unsere nächtlichen Docker-Bilder verwenden.
Hier erfahren Sie, wie Sie Tinysearch schnell mit Docker ausprobieren:
# 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.jsonStandardmäßig wird das neueste stabile Alpine -Rost -Bild verwendet. Nachtsnacht zu bekommen, rennen Sie
docker build --build-arg RUST_IMAGE=rustlang/rust:nightly-alpine -t tinysearch/cli:nightly .WASM_REPO : Überschreiben Sie das Wasm-Pack-RepositoryWASM_BRANCH : Überschreiben Sie den Repository -Zweig, um sie zu verwendenTINY_REPO : Überschreibe Repository von TinysearchTINY_BRANCH : Tinysearch -Zweig überschreiben Um Tinysearch in kontinuierliche Einsatzpipelines zu integrieren, ist eine GitHub -Aktion verfügbar.
- name : Build tinysearch
uses : leonhfr/tinysearch-action@v1
with :
index : public/index.json
output_dir : public/wasm
output_types : |
wasm Die folgenden Websites verwenden Tinysearch:
Verwenden Sie auch Tinysearch? Fügen Sie Ihre Website hier hinzu!
Tinysearch ist unter einem von lizenziert
nach Ihrer Option.