Observe que isso está longe de estar pronto para produção, e o Toshi ainda está em desenvolvimento ativo, estou apenas lento.
O Toshi foi criado para ser um mecanismo de pesquisa de texto completo semelhante ao Elasticsearch. Toshi se esforça para ser para o Elasticsearch o que Tantivy é para Lucene.
A Toshi sempre terá como alvo o Rust estável e fará o possível para nunca fazer uso do Rust inseguro. Embora as bibliotecas subjacentes possam fazer algum uso inseguro, a Toshi fará um esforço conjunto para examinar essas bibliotecas em um esforço para ficar completamente livre do uso inseguro do Rust. A razão pela qual escolhi isto foi porque senti que para que isto realmente se tornasse uma opção atraente para as pessoas considerarem, teria que ser segura, estável e consistente. Foi por isso que o Rust estável foi escolhido pelas garantias e segurança que oferece. Eu não queria entrar na toca do coelho usando recursos noturnos para ter problemas com sua estabilidade mais tarde. Como Toshi não foi feito para ser uma biblioteca, estou perfeitamente bem em ter esse requisito, porque as pessoas que desejam usá-lo provavelmente irão retirá-lo da prateleira e não modificá-lo. Minha motivação foi atender a esse caso de uso ao construir o Toshi.
No momento, o Toshi deve ser compilado e funcionar bem no Windows, Mac OS X e Linux. Dos requisitos de dependência, você precisará do 1.39.0 e do Cargo instalados para construir. Você pode enferrujar facilmente devido à ferrugem.
Há um arquivo de configuração padrão em 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"
O nome do host ao qual Toshi será vinculado no início.
port = 8080
A porta à qual Toshi será vinculado no início.
path = "data/"
O caminho de dados onde o Toshi armazenará seus dados e índices.
writer_memory = 200000000
A quantidade de memória (em bytes) que o Toshi deve alocar para commits de novos documentos.
log_level = "info"
O nível de detalhe a ser usado para o registro em log do Toshi.
json_parsing_threads = 4
Quando o Toshi faz uma ingestão em massa de documentos, ele gera vários threads para analisar o json do documento conforme ele é recebido. Isso controla o número de threads gerados para lidar com esse trabalho.
bulk_buffer_size = 10000
Isto controlará o tamanho do buffer para analisar documentos em um índice. Ele controlará a quantidade de memória que uma ingestão em massa ocupará, bloqueando quando o buffer de mensagens for preenchido. Se você quiser sair totalmente dos trilhos, pode definir isso como 0 para tornar o buffer ilimitado.
auto_commit_duration = 10
Isso controla a frequência com que um índice confirmará documentos automaticamente se houver documentos a serem confirmados. Defina como 0 para desabilitar esse recurso, mas você mesmo terá que fazer commits ao enviar documentos.
[ merge_policy ]
kind = " log "
Tantivy irá mesclar segmentos de índice de acordo com a configuração descrita aqui. Existem 2 opções para isso. "log", que é o comportamento padrão de mesclagem de segmentos. Log também possui 3 valores adicionais. Qualquer um desses 3 valores pode ser omitido para usar o valor padrão do Tantivy. Os valores padrão estão listados abaixo.
min_merge_size = 8
min_layer_size = 10_000
level_log_size = 0.75
Além disso existe a opção “nomerge”, na qual o Tantivy não fará nenhuma fusão de segmentos.
experimental = false
[ experimental_features ]
master = true
nodes = [
" 127.0.0.1:8081 "
]
Em geral, essas configurações ainda não estão prontas para uso, pois são muito instáveis ou totalmente quebradas. No momento, a distribuição do Toshi está por trás deste sinalizador, portanto, se experimental for definido como falso, todas essas configurações serão ignoradas.
Toshi pode ser construído usando cargo build --release
. Depois que o Toshi for compilado, você pode executar ./target/release/toshi
no diretório de nível superior para iniciar o Toshi de acordo com a configuração em config/config.toml
Você deve receber uma mensagem de inicialização como esta.
______ __ _ ____ __
/_ __/__ ___ / / (_) / __/__ ___ _________/ /
/ / / _ ( _- < / _ / / _ / -_) _ ` / __/ __/ _
/_/ _ __/___/_//_/_/ /___/ _ _/ _ ,_/_/ _ _/_//_/
Such Relevance, Much Index, Many Search, Wow
INFO toshi::index > Indexes: []
Você pode verificar se o Toshi está funcionando com:
curl -X GET http://localhost:8080/
que deve retornar:
{
"name" : " Toshi Search " ,
"version" : " 0.1.1 "
}
Quando o toshi estiver em execução, é melhor verificar o arquivo requests.http
na raiz deste projeto para ver mais alguns exemplos 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 tentar qualquer uma das consultas acima, você pode usar o exemplo acima
curl -X POST http://localhost:8080/test_index -H ' Content-Type: application/json ' -d ' { "query": {"term": {"test_text": "document" } }, "limit": 10 } '
Além disso, observe que o limite é opcional, 10 é o valor padrão. Ele está incluído aqui apenas para fins de integridade.
cargo test
Toshi é um Shiba Inu de três anos. Ele é um menino muito bom e é o mascote oficial deste projeto. Toshi revisa pessoalmente todo o código antes de ser enviado para este repositório e se dedica a aceitar apenas contribuições da mais alta qualidade de seu ser humano. Ele, no entanto, aceitará guloseimas para revisões de código mais fáceis.