Eine sehr kleine eigenständige Volltext-Suche HTTP/SCGI-Server.

Das obige und
tools/dir2jsonlIn jüngsten Debian und Ubuntu installieren Sie die Abhängigkeiten mit
sudo apt install libsqlite3-tcl make sqlite3 tcl tcllib tdomAuf FreeBSD mit sudo installieren Sie die Abhängigkeiten mit
sudo pkg install sqlite3 tcl-sqlite3 tcl86 tcllib tdom
cd /usr/local/bin
sudo ln -s tclsh8.6 tclsh Usage:
tinyfts --db-file path [option ...] [wapp-arg ...]
Options:
--css-file ''
--credits <HTML>
--header <HTML>
--footer <HTML>
--title tinyfts
--subtitle <HTML>
--table tinyfts
--rate-limit 60
--result-limit 100
--log 'access bad-request error rate'
--behind-reverse-proxy false
--snippet-size 20
--title-weight 1000.0
--query-min-length 2
--query-syntax web
Die grundlegende Verwendung ist
tools/import jsonl example.jsonl example.sqlite3
# Local server
./tinyfts --db-file example.sqlite3 --local 8080
# Server available over the network
./tinyfts --db-file example.sqlite3 --server 8080Die Standard-Syntax für Volltext-Suchanfragen in Tinyfts ähnelt der einer Web-Suchmaschine. Es kann die folgenden Arten von Ausdrücken verarbeiten.
foo - Suche nach dem Wort foo ."foo bar" - Suche nach der Phrase foo bar .foo AND bar , foo OR bar , NOT foo - suchen Sie nach foo und bar , mindestens eines von foo und bar sowie Dokumenten ohne foo . foo AND bar sind identisch mit foo bar . Die Operatoren AND , OR müssen und NOT in allen Kappen sein.-foo , -"foo bar" -genauso wie NOT foo , NOT "foo bar" . Sie können Ihren Benutzern ermöglichen, vollständige FTS5-Abfragen mit der Befehlszeilenoption --query-syntax fts5 zu schreiben. FTS5 -Abfragen sind leistungsfähiger, enthüllen jedoch die technischen Details der zugrunde liegenden Datenbank. (Zum Beispiel die Spaltennamen.) Benutzer, die mit der FTS5 -Syntax nicht vertraut sind, werden es überraschend finden und auf Fehler stoßen, weil sie kein Wort zitiert, das eine besondere Bedeutung hat.
Tinyfts durchsucht den Inhalt einer SQLite -Datenbanktabelle mit einem bestimmten Schema. Mit dem gebündelten Import tools/import können serialisierte Daten (Textdateien mit einem JSON -Objekt oder TCL -Wörterbuch pro Zeile) und Wiki -Seiten von einer Wikit/Nikit -Datenbank in eine Tinyfts -Datenbank importiert werden.
In diesem Beispiel wird angezeigt, wie die Suche nach einer Sicherungskopie des Wiki des Tclers eingerichtet wird. Die Anweisungen sollten auf den meisten Linux -Verteilungen und FreeBSD mit den installierten Abhängigkeiten und Giten funktionieren.
1. Gehen Sie zu https://sourceforge.net/project/showfiles.php?group_id=211498. Laden Sie den letzten Wikit -Datenbank -Snapshot des Wiki des Tcler herunter und extrahieren Sie sie. Derzeit ist das wikit-20141112.zip . Nehmen wir an, Sie haben die Datenbankdatei an ~/Downloads/wikit.tkd extrahiert.
2. Download, bauen und testen Sie Tinyfts. In diesem Beispiel verwenden wir Git, um die neueste Entwicklungsversion zu erhalten.
git clone https://github.com/dbohdan/tinyfts
cd tinyfts
make3. Erstellen Sie eine Tinyfts -Suchdatenbank aus der Wiki -Datenbank des Tclers. Das Repository enthält ein Import -Tool, das Wikit -Datenbanken unterstützt. Abhängig von Ihrer Hardware kann dies mit einer Eingangsdatenbankgröße in Hunderten von Megabyte bis zu einigen Minuten dauern.
./tools/import wikit ~ /Downloads/wikit.tkd /tmp/fts.sqlite34. Starten Sie Tinyfts auf http: // localhost: 8080. Die Server -URL sollte automatisch in Ihrem Browser geöffnet werden. Versuchen Sie, zu suchen.
./tinyfts --db-file /tmp/fts.sqlite3 --title ' tinyfts demo ' --local 8080--behind-reverse-proxy true . Es ist für die korrekte Erkennung der Client -IP -Adresse erforderlich, von der die Rate -Limiting abhängt. Aktivieren Sie nicht --behind-reverse-proxy wenn Tinyfts nicht hinter einem umgekehrten Stellvertreter steckt. Dadurch wird die Kunden ihre IP mit dem Header X-Real-IP oder X-Forwarded-For die Auswehung der Rate erfüllen, die sich selbst einschränken und andere beschränken. MIT. WAPP ist Copyright (C) 2017-2022 D. Richard Hipp und wird unter der vereinfachten BSD-Lizenz verteilt. Tacit ist Copyright (C) 2015-2020 Yegor Bugayenko und wird unter der MIT-Lizenz verteilt.