Tenga en cuenta que esto está lejos de estar listo para producción, además Toshi todavía está en desarrollo activo, simplemente voy lento.
Toshi pretende ser un motor de búsqueda de texto completo similar a Elasticsearch. Toshi se esfuerza por ser para Elasticsearch lo que Tantivy es para Lucene.
Toshi siempre apuntará a Rust estable y hará todo lo posible para nunca utilizar Rust inseguro. Si bien las bibliotecas subyacentes pueden hacer algún uso inseguro, Toshi hará un esfuerzo concertado para examinar estas bibliotecas en un esfuerzo por estar completamente libres del uso inseguro de Rust. La razón por la que elegí esto fue porque sentí que para que realmente se convirtiera en una opción atractiva para que la gente la considerara, tendría que ser segura, estable y consistente. Por este motivo se eligió la estable Rust por las garantías y seguridad que ofrece. No quería caer en la trampa del uso de funciones nocturnas para luego tener problemas con su estabilidad más adelante. Dado que Toshi no está destinado a ser una biblioteca, estoy perfectamente de acuerdo con tener este requisito porque las personas que quieran usarlo probablemente lo sacarán del estante y no lo modificarán. Mi motivación fue atender ese caso de uso al construir Toshi.
En este momento Toshi debería compilarse y funcionar bien en Windows, Mac OS X y Linux. Según los requisitos de dependencia, necesitará 1.39.0 y Cargo instalado para poder compilar. Puede oxidarse fácilmente debido a la oxidación.
Hay un archivo de configuración predeterminado en 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"
El nombre de host al que Toshi se vinculará al inicio.
port = 8080
El puerto al que Toshi se unirá al inicio.
path = "data/"
La ruta de datos donde Toshi almacenará sus datos e índices.
writer_memory = 200000000
La cantidad de memoria (en bytes) que Toshi debe asignar a las confirmaciones de nuevos documentos.
log_level = "info"
El nivel de detalle que se utilizará para el registro de Toshi.
json_parsing_threads = 4
Cuando Toshi realiza una ingesta masiva de documentos, activará varios subprocesos para analizar el json del documento tal como se recibe. Esto controla la cantidad de subprocesos generados para manejar este trabajo.
bulk_buffer_size = 10000
Esto controlará el tamaño del búfer para analizar documentos en un índice. Controlará la cantidad de memoria que ocupará una ingesta masiva bloqueando cuando se llene el búfer de mensajes. Si desea salirse totalmente de los rieles, puede configurarlo en 0 para que el búfer no tenga límites.
auto_commit_duration = 10
Esto controla la frecuencia con la que un índice confirmará automáticamente los documentos si hay documentos por confirmar. Establezca esto en 0 para deshabilitar esta función, pero tendrá que comprometerse usted mismo cuando envíe documentos.
[ merge_policy ]
kind = " log "
Tantivy fusionará segmentos de índice de acuerdo con la configuración descrita aquí. Hay 2 opciones para esto. "log", que es el comportamiento de fusión de segmentos predeterminado. Log también tiene 3 valores adicionales. Cualquiera de estos 3 valores se puede omitir para usar el valor predeterminado de Tantivy. Los valores predeterminados se enumeran a continuación.
min_merge_size = 8
min_layer_size = 10_000
level_log_size = 0.75
Además existe la opción "nomerge", en la que Tantivy no fusionará segmentos.
experimental = false
[ experimental_features ]
master = true
nodes = [
" 127.0.0.1:8081 "
]
En general, estas configuraciones aún no están listas para su uso porque son muy inestables o están completamente rotas. En este momento, la distribución de Toshi está detrás de esta bandera, por lo que si experimental se establece en falso, todas estas configuraciones se ignoran.
Toshi se puede construir usando cargo build --release
. Una vez que Toshi esté construido, puede ejecutar ./target/release/toshi
desde el directorio de nivel superior para iniciar Toshi de acuerdo con la configuración en config/config.toml.
Debería recibir un mensaje de inicio como este.
______ __ _ ____ __
/_ __/__ ___ / / (_) / __/__ ___ _________/ /
/ / / _ ( _- < / _ / / _ / -_) _ ` / __/ __/ _
/_/ _ __/___/_//_/_/ /___/ _ _/ _ ,_/_/ _ _/_//_/
Such Relevance, Much Index, Many Search, Wow
INFO toshi::index > Indexes: []
Puedes verificar que Toshi se esté ejecutando con:
curl -X GET http://localhost:8080/
que debería devolver:
{
"name" : " Toshi Search " ,
"version" : " 0.1.1 "
}
Una vez que toshi se esté ejecutando, es mejor verificar el archivo requests.http
en la raíz de este proyecto para ver más ejemplos de uso.
{ "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 }
Para probar cualquiera de las consultas anteriores, puede utilizar el ejemplo anterior.
curl -X POST http://localhost:8080/test_index -H ' Content-Type: application/json ' -d ' { "query": {"term": {"test_text": "document" } }, "limit": 10 } '
Además, cabe señalar que el límite es opcional y 10 es el valor predeterminado. Sólo se incluye aquí para que esté completo.
cargo test
Toshi es un Shiba Inu de tres años. Es un muy buen chico y es la mascota oficial de este proyecto. Toshi revisa personalmente todo el código antes de enviarlo a este repositorio y se dedica a aceptar únicamente contribuciones de la más alta calidad de su ser humano. Sin embargo, aceptará obsequios para facilitar la revisión del código.