โปรดทราบว่านี่ยังไม่พร้อมสำหรับการผลิต นอกจากนี้ Toshi ยังอยู่ระหว่างการพัฒนา ฉันแค่ช้าเท่านั้น
Toshi ตั้งใจให้เป็นเครื่องมือค้นหาข้อความแบบเต็มคล้ายกับ Elasticsearch โทชิมุ่งมั่นที่จะเป็น Elasticsearch ว่า Tantivy คืออะไรสำหรับ Lucene
Toshi จะกำหนดเป้าหมายไปที่ Rust ที่เสถียรเสมอ และจะพยายามอย่างดีที่สุดที่จะไม่นำ Rust ที่ไม่ปลอดภัยไปใช้เลย แม้ว่าไลบรารีพื้นฐานอาจใช้สิ่งที่ไม่ปลอดภัยบ้าง Toshi จะพยายามร่วมกันในการตรวจสอบไลบรารีเหล่านี้ในความพยายามที่จะปราศจากการใช้งาน 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
ท่าเรือโทชิจะผูกมัดเมื่อเริ่มต้น
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" ซึ่งเป็นพฤติกรรมการรวมกลุ่มเริ่มต้น 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 อยู่เบื้องหลังแฟล็กนี้ ดังนั้น หากการทดลองตั้งค่าเป็นเท็จ การตั้งค่าทั้งหมดเหล่านี้จะถูกละเว้น
Toshi สามารถสร้างขึ้นได้โดยใช้ 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
โทชิคือชิบะอินุอายุสามขวบ เขาเป็นเด็กดีมากและเป็นตัวนำโชคอย่างเป็นทางการของโครงการนี้ Toshi ตรวจสอบโค้ดทั้งหมดเป็นการส่วนตัวก่อนที่จะส่งมอบให้กับพื้นที่เก็บข้อมูลนี้ และมุ่งมั่นที่จะยอมรับเฉพาะการมีส่วนร่วมที่มีคุณภาพสูงสุดจากมนุษย์ของเขาเท่านั้น อย่างไรก็ตาม เขาจะยอมรับการปฏิบัติเพื่อการตรวจสอบโค้ดที่ง่ายขึ้น