Harap dicatat bahwa ini masih jauh dari siap produksi, dan Toshi juga masih dalam pengembangan aktif, saya hanya lambat.
Toshi dimaksudkan untuk menjadi mesin pencari teks lengkap yang mirip dengan Elasticsearch. Toshi berusaha keras untuk menjadi Elasticsearch seperti halnya Tantivy bagi Lucene.
Toshi akan selalu menargetkan Rust yang stabil dan akan berusaha sebaik mungkin untuk tidak menggunakan Rust yang tidak aman. Meskipun perpustakaan yang mendasarinya mungkin menggunakan beberapa hal yang tidak aman, Toshi akan melakukan upaya bersama untuk memeriksa perpustakaan ini dalam upaya untuk sepenuhnya bebas dari penggunaan Rust yang tidak aman. Alasan saya memilih hal ini adalah karena saya merasa bahwa agar hal ini benar-benar menjadi pilihan yang menarik untuk dipertimbangkan orang, hal ini harus aman, stabil, dan konsisten. Inilah mengapa stable Rust dipilih karena jaminan dan keamanan yang diberikannya. Saya tidak ingin bersusah payah menggunakan fitur malam hari sehingga kemudian mengalami masalah dengan stabilitasnya di kemudian hari. Karena Toshi tidak dimaksudkan sebagai perpustakaan, saya baik-baik saja dengan persyaratan ini karena orang yang ingin menggunakannya kemungkinan besar akan melepasnya dan tidak memodifikasinya. Motivasi saya adalah untuk memenuhi kasus penggunaan tersebut ketika membangun Toshi.
Saat ini Toshi seharusnya dapat dibangun dan berfungsi dengan baik di Windows, Mac OS X, dan Linux. Dari persyaratan ketergantungan, Anda memerlukan 1.39.0 dan Cargo diinstal untuk membangun. Anda bisa mudah berkarat karena karat.
Ada file konfigurasi default di 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"
Nama host yang akan diikat Toshi saat memulai.
port = 8080
Port yang akan diikat Toshi saat memulai.
path = "data/"
Jalur data tempat Toshi akan menyimpan data dan indeksnya.
writer_memory = 200000000
Jumlah memori (dalam byte) yang harus dialokasikan Toshi untuk diterapkan pada dokumen baru.
log_level = "info"
Tingkat detail yang digunakan untuk logging Toshi.
json_parsing_threads = 4
Saat Toshi melakukan penyerapan dokumen secara massal, ia akan memutar sejumlah thread untuk mengurai json dokumen saat diterima. Ini mengontrol jumlah thread yang dihasilkan untuk menangani pekerjaan ini.
bulk_buffer_size = 10000
Ini akan mengontrol ukuran buffer untuk mengurai dokumen menjadi indeks. Ini akan mengontrol jumlah memori yang akan digunakan oleh penyerapan massal dengan memblokir ketika buffer pesan terisi. Jika Anda ingin benar-benar keluar jalur, Anda dapat mengaturnya ke 0 untuk membuat buffer tidak dibatasi.
auto_commit_duration = 10
Ini mengontrol seberapa sering indeks akan secara otomatis mengkomit dokumen jika ada dokumen yang akan dikomit. Setel ini ke 0 untuk menonaktifkan fitur ini, tetapi Anda harus melakukan komitmen sendiri saat mengirimkan dokumen.
[ merge_policy ]
kind = " log "
Tantivy akan menggabungkan segmen indeks sesuai dengan konfigurasi yang diuraikan di sini. Ada 2 opsi untuk ini. "log" yang merupakan perilaku penggabungan segmen default. Log juga memiliki 3 nilai tambahan. Salah satu dari 3 nilai ini dapat dihilangkan untuk menggunakan nilai default Tantivy. Nilai default tercantum di bawah ini.
min_merge_size = 8
min_layer_size = 10_000
level_log_size = 0.75
Selain itu ada opsi "nomerge", di mana Tantivy tidak akan melakukan penggabungan segmen.
experimental = false
[ experimental_features ]
master = true
nodes = [
" 127.0.0.1:8081 "
]
Secara umum pengaturan ini belum siap digunakan karena sangat tidak stabil atau rusak. Saat ini distribusi Toshi berada di balik tanda ini, jadi jika eksperimental disetel ke false maka semua setelan ini akan diabaikan.
Toshi dapat dibangun menggunakan cargo build --release
. Setelah Toshi dibuat, Anda dapat menjalankan ./target/release/toshi
dari direktori tingkat atas untuk memulai Toshi sesuai dengan konfigurasi di config/config.toml
Anda harus mendapatkan pesan startup seperti ini.
______ __ _ ____ __
/_ __/__ ___ / / (_) / __/__ ___ _________/ /
/ / / _ ( _- < / _ / / _ / -_) _ ` / __/ __/ _
/_/ _ __/___/_//_/_/ /___/ _ _/ _ ,_/_/ _ _/_//_/
Such Relevance, Much Index, Many Search, Wow
INFO toshi::index > Indexes: []
Anda dapat memverifikasi Toshi berjalan dengan:
curl -X GET http://localhost:8080/
yang harus kembali:
{
"name" : " Toshi Search " ,
"version" : " 0.1.1 "
}
Setelah toshi berjalan, sebaiknya periksa file requests.http
di root proyek ini untuk melihat beberapa contoh penggunaan lainnya.
{ "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 }
Untuk mencoba salah satu pertanyaan di atas, Anda dapat menggunakan contoh di atas
curl -X POST http://localhost:8080/test_index -H ' Content-Type: application/json ' -d ' { "query": {"term": {"test_text": "document" } }, "limit": 10 } '
Perlu diperhatikan juga, batas bersifat opsional, 10 adalah nilai default. Ini hanya disertakan di sini untuk kelengkapan.
cargo test
Toshi adalah Shiba Inu berusia tiga tahun. Dia adalah anak yang sangat baik dan merupakan maskot resmi proyek ini. Toshi secara pribadi meninjau semua kode sebelum dimasukkan ke repositori ini dan berdedikasi untuk hanya menerima kontribusi kualitas tertinggi dari manusianya. Namun, dia akan menerima hadiah untuk peninjauan kode yang lebih mudah.