これはまだ製品化の準備ができていないことに注意してください。また、Toshi はまだ開発中です。ただ遅いだけです。
Toshi は、Elasticsearch に似た全文検索エンジンを目的としています。 Toshi は、Elasticsearch にとって Lucene にとっての Tantivy のような存在になるよう努めています。
トシは常に安定した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/"
トシがデータとインデックスを保存するデータ パス。
writer_memory = 200000000
トシが新しいドキュメントのコミットに割り当てるメモリ量 (バイト単位)。
log_level = "info"
トシのログ記録に使用する詳細レベル。
json_parsing_threads = 4
Toshi がドキュメントの一括取り込みを実行すると、受信したドキュメントの json を解析するために多数のスレッドが起動されます。これにより、このジョブを処理するために生成されるスレッドの数が制御されます。
bulk_buffer_size = 10000
これにより、ドキュメントをインデックスに解析するためのバッファ サイズが制御されます。メッセージ バッファーがいっぱいになったときにブロックすることで、一括取り込みが占有するメモリの量を制御します。完全にレールから外れたい場合は、これを 0 に設定してバッファーを無制限にすることができます。
auto_commit_duration = 10
これは、コミットするドキュメントがある場合に、インデックスがドキュメントを自動的にコミットする頻度を制御します。この機能を無効にするには、これを 0 に設定します。ただし、ドキュメントを送信するときに自分でコミットを行う必要があります。
[ merge_policy ]
kind = " log "
Tantivy は、ここで説明する構成に従ってインデックス セグメントをマージします。これには 2 つのオプションがあります。 「ログ」はデフォルトのセグメントマージ動作です。 Log には 3 つの追加値もあります。これら 3 つの値はいずれも省略して、Tantivy のデフォルト値を使用できます。デフォルト値を以下に示します。
min_merge_size = 8
min_layer_size = 10_000
level_log_size = 0.75
さらに、Tantivy がセグメントのマージを行わない「nomerge」オプションもあります。
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 } '
また、制限はオプションであり、10 がデフォルト値であることに注意してください。ここでは完全を期すためにのみ記載しています。
cargo test
トシは3歳の柴犬です。彼はとても良い子で、このプロジェクトの公式マスコットです。トシは、このリポジトリにコミットされる前にすべてのコードを個人的にレビューし、彼の人間からの最高品質の貢献のみを受け入れることに専念しています。ただし、コードレビューを容易にするためのおごりは受け入れます。