請注意,這還遠未準備好投入生產,而且 Toshi 仍在積極開發中,我只是速度慢。
Toshi 旨在成為一個類似於 Elasticsearch 的全文搜尋引擎。 Toshi 致力於成為 Elasticsearch 之於 Elasticsearch,就像 Tantivy 之於 Lucene 一樣。
Toshi 將始終以穩定的 Rust 為目標,並盡力不使用任何不安全的 Rust。雖然底層庫可能會使用一些不安全的東西,但 Toshi 將齊心協力審查這些庫,以完全杜絕不安全的 Rust 使用。我選擇這個的原因是因為我覺得它必須是安全、穩定和一致的,才能真正成為人們認為有吸引力的選擇。這就是選擇穩定 Rust 的原因,因為它提供了保證和安全性。我不想陷入使用夜間功能的兔子洞,然後在以後出現穩定性問題。由於 Toshi 並不是一個圖書館,所以我完全可以接受這個要求,因為那些想要使用它的人很可能會把它下架而不修改它。我的動機是在建立 Toshi 時迎合該用例。
目前,Toshi 應該可以在 Windows、Mac OS X 和 Linux 上建置並正常運作。根據依賴項要求,您將需要安裝 1.39.0 和 Cargo 才能建置。您很容易因生鏽而生鏽。
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"
Toshi 將在啟動時綁定的主機名稱。
port = 8080
Toshi 連接埠將在啟動時綁定。
path = "data/"
Toshi 將儲存其資料和索引的資料路徑。
writer_memory = 200000000
Toshi 應分配給新文件提交的記憶體量(以位元組為單位)。
log_level = "info"
用於 Toshi 日誌記錄的詳細程度。
json_parsing_threads = 4
當 Toshi 大量攝取文件時,它會啟動多個執行緒來解析收到的文件的 json。這控制了為處理此作業而產生的線程數。
bulk_buffer_size = 10000
這將控制將文件解析為索引的緩衝區大小。當訊息緩衝區被填滿時,它將透過阻塞來控制批次攝取所佔用的記憶體量。如果你想完全脫離軌道,你可以將其設為 0,以使緩衝區不受限制。
auto_commit_duration = 10
如果有要提交的文檔,這將控制索引自動提交文檔的頻率。將其設為 0 以停用此功能,但您在提交文件時必須自行提交。
[ merge_policy ]
kind = " log "
Tantivy 將根據此處概述的配置合併索引段。有兩種選擇。 “log”這是預設的段合併行為。 Log 還有 3 個附加價值。可以省略這 3 個值中的任何一個以使用 Tantivy 的預設值。下面列出了預設值。
min_merge_size = 8
min_layer_size = 10_000
level_log_size = 0.75
此外,還有「nomerge」選項,其中 Tantivy 將不進行段合併。
experimental = false
[ experimental_features ]
master = true
nodes = [
" 127.0.0.1:8081 "
]
一般來說,這些設定尚未準備好使用,因為它們非常不穩定或完全損壞。目前,Toshi 的發行版位於此標誌後面,因此如果experimental 設定為 false,則所有這些設定都將被忽略。
Toshi 可以使用cargo build --release
來建構。 Toshi 建置完成後,您可以從頂級目錄執行./target/release/toshi
以根據 config/config.toml 中的設定啟動 Toshi
您應該會收到這樣的啟動訊息。
______ __ _ ____ __
/_ __/__ ___ / / (_) / __/__ ___ _________/ /
/ / / _ ( _- < / _ / / _ / -_) _ ` / __/ __/ _
/_/ _ __/___/_//_/_/ /___/ _ _/ _ ,_/_/ _ _/_//_/
Such Relevance, Much Index, Many Search, Wow
INFO toshi::index > Indexes: []
您可以驗證 Toshi 是否正在運作:
curl -X GET http://localhost:8080/
應該返回:
{
"name" : " Toshi Search " ,
"version" : " 0.1.1 "
}
一旦 toshi 運行,最好檢查該專案根目錄中的requests.http
文件,以查看更多使用範例。
{ "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 }
要嘗試上述任何查詢,您可以使用上面的範例
curl -X POST http://localhost:8080/test_index -H ' Content-Type: application/json ' -d ' { "query": {"term": {"test_text": "document" } }, "limit": 10 } '
另外,要注意的是,limit 是可選的,10 是預設值。出於完整性考慮才將其包含在此。
cargo test
Toshi 是一隻三歲的柴犬。他是一個非常好的男孩,也是這個計畫的官方吉祥物。 Toshi 在將所有程式碼提交到此儲存庫之前都會親自對其進行審查,並致力於只接受其人員的最高品質貢獻。不過,他會接受更輕鬆的程式碼審查的獎勵。