Veuillez noter que c'est loin d'être prêt pour la production, et Toshi est également toujours en développement actif, je suis juste lent.
Toshi est censé être un moteur de recherche en texte intégral similaire à Elasticsearch. Toshi s'efforce d'être pour Elasticsearch ce que Tantivy est pour Lucene.
Toshi ciblera toujours Rust stable et fera de son mieux pour ne jamais utiliser Rust dangereux. Bien que les bibliothèques sous-jacentes puissent utiliser certaines utilisations non sécurisées, Toshi fera un effort concerté pour vérifier ces bibliothèques afin d'être complètement exemptes d'utilisations dangereuses de Rust. La raison pour laquelle j'ai choisi cette option est que je pensais que pour que cela devienne réellement une option attrayante pour les gens, il faudrait qu'elle soit sûre, stable et cohérente. C'est pourquoi la version stable de Rust a été choisie en raison des garanties et de la sécurité qu'elle offre. Je ne voulais pas me lancer dans l’utilisation de fonctionnalités nocturnes pour ensuite avoir des problèmes de stabilité plus tard. Puisque Toshi n'est pas censé être une bibliothèque, je suis parfaitement d'accord avec cette exigence, car les personnes qui voudraient l'utiliser plus que probablement la retireront du étagère et ne la modifieront pas. Ma motivation était de répondre à ce cas d'utilisation lors de la création de Toshi.
À l'heure actuelle, Toshi devrait être construit et fonctionner correctement sous Windows, Mac OS X et Linux. D'après les exigences de dépendance, vous aurez besoin de la version 1.39.0 et de Cargo installés pour pouvoir construire. Vous pouvez facilement attraper de la rouille à cause de la rouille.
Il existe un fichier de configuration par défaut dans config/config.toml :
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"
Le nom d'hôte auquel Toshi se liera au démarrage.
port = 8080
Le port auquel Toshi se connectera au démarrage.
path = "data/"
Le chemin de données où Toshi stockera ses données et index.
writer_memory = 200000000
La quantité de mémoire (en octets) que Toshi doit allouer aux validations pour les nouveaux documents.
log_level = "info"
Le niveau de détail à utiliser pour la journalisation de Toshi.
json_parsing_threads = 4
Lorsque Toshi effectue une acquisition massive de documents, il lance un certain nombre de threads pour analyser le json du document tel qu'il est reçu. Cela contrôle le nombre de threads générés pour gérer ce travail.
bulk_buffer_size = 10000
Cela contrôlera la taille du tampon pour analyser les documents dans un index. Il contrôlera la quantité de mémoire qu'une ingestion groupée occupera en bloquant lorsque le tampon de message est rempli. Si vous souhaitez dérailler totalement, vous pouvez définir cette valeur sur 0 afin de rendre le tampon illimité.
auto_commit_duration = 10
Cela contrôle la fréquence à laquelle un index validera automatiquement les documents s'il y a des documents à valider. Réglez-le sur 0 pour désactiver cette fonctionnalité, mais vous devrez vous engager vous-même lorsque vous soumettez des documents.
[ merge_policy ]
kind = " log "
Tantivy fusionnera les segments d'index selon la configuration décrite ici. Il existe 2 options pour cela. "log" qui est le comportement de fusion de segments par défaut. Log a également 3 valeurs supplémentaires. N'importe laquelle de ces 3 valeurs peut être omise pour utiliser la valeur par défaut de Tantivy. Les valeurs par défaut sont répertoriées ci-dessous.
min_merge_size = 8
min_layer_size = 10_000
level_log_size = 0.75
De plus, il existe l'option "nomerge", dans laquelle Tantivy ne fera aucune fusion de segments.
experimental = false
[ experimental_features ]
master = true
nodes = [
" 127.0.0.1:8081 "
]
En général, ces paramètres ne sont pas encore prêts à être utilisés car ils sont très instables ou carrément cassés. À l'heure actuelle, la distribution de Toshi est derrière ce drapeau, donc si experimental est défini sur false alors tous ces paramètres sont ignorés.
Toshi peut être construit en utilisant cargo build --release
. Une fois Toshi construit, vous pouvez exécuter ./target/release/toshi
à partir du répertoire de niveau supérieur pour démarrer Toshi selon la configuration dans config/config.toml
Vous devriez recevoir un message de démarrage comme celui-ci.
______ __ _ ____ __
/_ __/__ ___ / / (_) / __/__ ___ _________/ /
/ / / _ ( _- < / _ / / _ / -_) _ ` / __/ __/ _
/_/ _ __/___/_//_/_/ /___/ _ _/ _ ,_/_/ _ _/_//_/
Such Relevance, Much Index, Many Search, Wow
INFO toshi::index > Indexes: []
Vous pouvez vérifier que Toshi fonctionne avec :
curl -X GET http://localhost:8080/
qui devrait renvoyer :
{
"name" : " Toshi Search " ,
"version" : " 0.1.1 "
}
Une fois que toshi est exécuté, il est préférable de vérifier le fichier requests.http
à la racine de ce projet pour voir d'autres exemples d'utilisation.
{ "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 }
Pour essayer l'une des requêtes ci-dessus, vous pouvez utiliser l'exemple ci-dessus
curl -X POST http://localhost:8080/test_index -H ' Content-Type: application/json ' -d ' { "query": {"term": {"test_text": "document" } }, "limit": 10 } '
À noter également que la limite est facultative, 10 est la valeur par défaut. Il n’est inclus ici que par souci d’exhaustivité.
cargo test
Toshi est un Shiba Inu âgé de trois ans. C'est un très bon garçon et c'est la mascotte officielle de ce projet. Toshi examine personnellement tout le code avant de l'enregistrer dans ce référentiel et s'engage à n'accepter que les contributions de la plus haute qualité de la part de son humain. Il acceptera cependant des friandises pour des révisions de code plus faciles.