请注意,这还远未准备好投入生产,而且 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 在将所有代码提交到此存储库之前都会亲自对其进行审查,并致力于只接受其人员的最高质量贡献。不过,他会接受更轻松的代码审查的奖励。