이것은 아직 생산 준비가 되지 않았으며 Toshi는 아직 활발하게 개발 중이므로 속도가 느릴 뿐입니다.
Toshi는 Elasticsearch와 유사한 전체 텍스트 검색 엔진입니다. Toshi는 Lucene의 Tantivy와 마찬가지로 Elasticsearch에서도 노력하고 있습니다.
Toshi는 항상 안정적인 Rust를 목표로 삼고 안전하지 않은 Rust를 절대 사용하지 않도록 최선을 다할 것입니다. 기본 라이브러리가 unsafe를 일부 사용할 수 있지만 Toshi는 안전하지 않은 Rust 사용을 완전히 없애기 위해 이러한 라이브러리를 조사하기 위해 공동의 노력을 기울일 것입니다. 제가 이것을 선택한 이유는 이것이 실제로 사람들이 고려할 만한 매력적인 옵션이 되려면 안전하고 안정적이며 일관성이 있어야 한다고 느꼈기 때문입니다. 이것이 제공하는 보장과 안전성 때문에 안정적인 Rust를 선택한 이유입니다. 나는 야간 기능을 사용하여 나중에 안정성에 문제가 생기는 토끼굴을 만들고 싶지 않았습니다. Toshi는 라이브러리가 아니기 때문에 이 요구 사항을 충족하는 것은 전혀 문제가 되지 않습니다. Toshi를 더 많이 사용하려는 사람들은 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"입니다. 로그에는 3개의 추가 값도 있습니다. Tantivy의 기본값을 사용하려면 이 3가지 값 중 하나를 생략할 수 있습니다. 기본값은 아래에 나열되어 있습니다.
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의 배포는 이 플래그 뒤에 있으므로 실험이 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
토시는 세 살 된 시바견입니다. 그는 아주 착한 소년이고 이 프로젝트의 공식 마스코트입니다. Toshi는 모든 코드가 이 저장소에 커밋되기 전에 개인적으로 검토하고 인간의 최고 품질 기여만 받아들이는 데 전념합니다. 하지만 그는 더 쉬운 코드 검토를 위해 대접을 받을 것입니다.