Bitte beachten Sie, dass dies noch lange nicht produktionsreif ist, auch Toshi befindet sich noch in der aktiven Entwicklung, ich bin nur langsam.
Toshi soll eine Volltextsuchmaschine sein, ähnlich wie Elasticsearch. Toshi strebt danach, für Elasticsearch das zu sein, was Tantivy für Lucene ist.
Toshi wird immer auf stabiles Rust abzielen und unser Bestes geben, niemals unsicheres Rust zu nutzen. Auch wenn die zugrunde liegenden Bibliotheken möglicherweise unsichere Nutzung nutzen, wird Toshi eine konzertierte Anstrengung unternehmen, diese Bibliotheken zu überprüfen, um völlig frei von unsicherer Rust-Nutzung zu sein. Der Grund, warum ich mich dafür entschieden habe, war, dass ich der Meinung war, dass es sicher, stabil und konsistent sein muss, damit es für die Leute tatsächlich eine attraktive Option wird. Aus diesem Grund wurde stabiles Rust aufgrund der Garantien und Sicherheit ausgewählt, die es bietet. Ich wollte nicht den Versuch unternehmen, nächtliche Funktionen zu verwenden, um später Probleme mit deren Stabilität zu haben. Da Toshi nicht als Bibliothek gedacht ist, bin ich mit dieser Anforderung völlig einverstanden, denn Leute, die es höchstwahrscheinlich nutzen möchten, werden es aus dem Regal nehmen und nicht ändern. Meine Motivation bestand darin, diesen Anwendungsfall bei der Entwicklung von Toshi zu berücksichtigen.
Zum jetzigen Zeitpunkt sollte Toshi unter Windows, Mac OS X und Linux laufen und funktionieren. Aufgrund der Abhängigkeitsanforderungen müssen Sie zum Erstellen 1.39.0 und Cargo installiert haben. Durch Rustup kann man leicht Rost bekommen.
In config/config.toml gibt es eine Standardkonfigurationsdatei:
host = " 127.0.0.1 "
port = 8080
path = " data2/ "
writer_memory = 200000000
log_level = " info "
json_parsing_threads = 4
bulk_buffer_size = 10000
auto_commit_duration = 10
experimental = false
[ experimental_features ]
master = true
nodes = [
" 127.0.0.1:8081 "
]
[ merge_policy ]
kind = " log "
min_merge_size = 8
min_layer_size = 10_000
level_log_size = 0.75
host = "localhost"
Der Hostname, an den sich Toshi beim Start bindet.
port = 8080
Der Port, an den sich Toshi beim Start bindet.
path = "data/"
Der Datenpfad, in dem Toshi seine Daten und Indizes speichert.
writer_memory = 200000000
Die Menge an Speicher (in Bytes), die Toshi für Commits für neue Dokumente zuweisen sollte.
log_level = "info"
Die Detailebene, die für Toshis Protokollierung verwendet werden soll.
json_parsing_threads = 4
Wenn Toshi eine Massenaufnahme von Dokumenten durchführt, werden mehrere Threads gestartet, um den JSON-Code des Dokuments beim Empfang zu analysieren. Dies steuert die Anzahl der Threads, die zur Abwicklung dieses Jobs erzeugt werden.
bulk_buffer_size = 10000
Dadurch wird die Puffergröße zum Parsen von Dokumenten in einen Index gesteuert. Es steuert die Speichermenge, die eine Massenaufnahme einnimmt, indem es blockiert, wenn der Nachrichtenpuffer voll ist. Wenn Sie völlig aus dem Ruder laufen möchten, können Sie dies auf 0 setzen, um den Puffer unbegrenzt zu machen.
auto_commit_duration = 10
Dies steuert, wie oft ein Index automatisch Dokumente festschreibt, wenn Dokumente festgeschrieben werden müssen. Setzen Sie diesen Wert auf 0, um diese Funktion zu deaktivieren. Sie müssen jedoch selbst Commits durchführen, wenn Sie Dokumente einreichen.
[ merge_policy ]
kind = " log "
Tantivy führt Indexsegmente gemäß der hier beschriebenen Konfiguration zusammen. Hierfür gibt es 2 Möglichkeiten. „log“, das Standardverhalten beim Zusammenführen von Segmenten. Log enthält außerdem drei zusätzliche Werte. Jeder dieser drei Werte kann weggelassen werden, um den Standardwert von Tantivy zu verwenden. Die Standardwerte sind unten aufgeführt.
min_merge_size = 8
min_layer_size = 10_000
level_log_size = 0.75
Darüber hinaus gibt es die „Nomerge“-Option, bei der Tantivy keine Segmentzusammenführung vornimmt.
experimental = false
[ experimental_features ]
master = true
nodes = [
" 127.0.0.1:8081 "
]
Im Allgemeinen sind diese Einstellungen noch nicht einsatzbereit, da sie sehr instabil oder völlig kaputt sind. Derzeit steht die Distribution von Toshi hinter diesem Flag. Wenn „experimental“ also auf „false“ gesetzt ist, werden alle diese Einstellungen ignoriert.
Toshi kann mit cargo build --release
erstellt werden. Sobald Toshi erstellt ist, können Sie ./target/release/toshi
aus dem Verzeichnis der obersten Ebene ausführen, um Toshi gemäß der Konfiguration in config/config.toml zu starten
Sie sollten eine Startmeldung wie diese erhalten.
______ __ _ ____ __
/_ __/__ ___ / / (_) / __/__ ___ _________/ /
/ / / _ ( _- < / _ / / _ / -_) _ ` / __/ __/ _
/_/ _ __/___/_//_/_/ /___/ _ _/ _ ,_/_/ _ _/_//_/
Such Relevance, Much Index, Many Search, Wow
INFO toshi::index > Indexes: []
Sie können überprüfen, ob Toshi ausgeführt wird:
curl -X GET http://localhost:8080/
was zurückkommen sollte:
{
"name" : " Toshi Search " ,
"version" : " 0.1.1 "
}
Sobald Toshi ausgeführt wird, überprüfen Sie am besten die Datei requests.http
im Stammverzeichnis dieses Projekts, um weitere Anwendungsbeispiele zu sehen.
{ "query" : { "term" : { "test_text" : " document " } }, "limit" : 10 }
{ "query" : { "fuzzy" : { "test_text" : { "value" : " document " , "distance" : 0 , "transposition" : false } } }, "limit" : 10 }
{ "query" : { "phrase" : { "test_text" : { "terms" : [ " test " , " document " ] } } }, "limit" : 10 }
{ "query" : { "range" : { "test_i64" : { "gte" : 2012 , "lte" : 2015 } } }, "limit" : 10 }
{ "query" : { "regex" : { "test_text" : " d[ou]{1}c[k]?ument " } }, "limit" : 10 }
{ "query" : { "bool" : { "must" : [ { "term" : { "test_text" : " document " } } ], "must_not" : [ { "range" : { "test_i64" : { "gt" : 2017 } } } ] } }, "limit" : 10 }
Um eine der oben genannten Abfragen auszuprobieren, können Sie das obige Beispiel verwenden
curl -X POST http://localhost:8080/test_index -H ' Content-Type: application/json ' -d ' { "query": {"term": {"test_text": "document" } }, "limit": 10 } '
Beachten Sie außerdem, dass „Limit“ optional ist und 10 der Standardwert ist. Es wird hier nur der Vollständigkeit halber aufgeführt.
cargo test
Toshi ist ein dreijähriger Shiba Inu. Er ist ein sehr braver Junge und das offizielle Maskottchen dieses Projekts. Toshi prüft den gesamten Code persönlich, bevor er in dieses Repository übertragen wird, und ist bestrebt, von seinen Mitarbeitern nur Beiträge von höchster Qualität anzunehmen. Er wird jedoch Belohnungen für einfachere Codeüberprüfungen annehmen.