Обратите внимание, что это далеко не готово к производству, а Toshi все еще находится в активной разработке, я просто медленный.
Toshi задуман как полнотекстовая поисковая система, похожая на Elasticsearch. Тоши стремится быть для Elasticsearch тем же, чем Tantivy для Lucene.
Тоши всегда будет ориентироваться на стабильную версию 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 объединит сегменты индекса в соответствии с описанной здесь конфигурацией. Для этого есть 2 варианта. «log», который является поведением слияния сегментов по умолчанию. Журнал также имеет 3 дополнительных значения. Любое из этих трех значений можно опустить, чтобы использовать значение Tantivy по умолчанию. Значения по умолчанию перечислены ниже.
min_merge_size = 8
min_layer_size = 10_000
level_log_size = 0.75
Кроме того, существует опция «номерж», при которой Tantivy не будет выполнять объединение сегментов.
experimental = false
[ experimental_features ]
master = true
nodes = [
" 127.0.0.1:8081 "
]
В целом эти настройки еще не готовы к использованию, так как они очень нестабильны или полностью сломаны. Сейчас за этим флагом стоит дистрибутив Toshi, поэтому, если для экспериментального установлено значение false, все эти настройки игнорируются.
Тоши можно собрать с помощью cargo build --release
. После сборки Toshi вы можете запустить ./target/release/toshi
из каталога верхнего уровня, чтобы запустить Toshi в соответствии с конфигурацией в config/config.toml.
Вы должны получить такое стартовое сообщение.
______ __ _ ____ __
/_ __/__ ___ / / (_) / __/__ ___ _________/ /
/ / / _ ( _- < / _ / / _ / -_) _ ` / __/ __/ _
/_/ _ __/___/_//_/_/ /___/ _ _/ _ ,_/_/ _ _/_//_/
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
Тоши — трехлетний сиба-ину. Он очень хороший мальчик и является официальным талисманом этого проекта. Тоши лично просматривает весь код, прежде чем он будет помещен в этот репозиторий, и стремится принимать только самые качественные материалы от своего человека. Однако он примет угощения за упрощение проверки кода.