1 คะแนน โดย GN⁺ 2024-05-28 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

ไลบรารีเอนจินค้นหาแบบฟูลเท็กซ์ความเร็วสูงที่เขียนด้วย Rust

แนะนำ

  • Tantivy เป็นไลบรารีเอนจินค้นหาที่อ้างอิงการออกแบบจาก Apache Lucene อย่างมาก
  • ยังมี Quickwit ซึ่งเป็นเอนจินค้นหาแบบกระจายศูนย์ที่สามารถใช้เป็นทางเลือกแทน Elasticsearch หรือ Apache Solr ได้
  • Tantivy ไม่ใช่เซิร์ฟเวอร์เอนจินค้นหา แต่เป็น crate สำหรับสร้างเอนจินค้นหา

เบนช์มาร์ก

  • มีการให้ผลการทดสอบประสิทธิภาพสำหรับคิวรีและประเภทคอลเลกชันที่หลากหลาย
  • ประสิทธิภาพอาจแตกต่างกันไปตามลักษณะของคิวรีและภาระงาน

ฟีเจอร์หลัก

  • การค้นหาแบบฟูลเท็กซ์: รองรับ tokenizer สำหรับหลายภาษา
  • ประสิทธิภาพสูง: เริ่มทำงานได้รวดเร็วและรองรับการทำดัชนีแบบมัลติเธรด
  • การให้คะแนน BM25: ใช้วิธีให้คะแนนแบบเดียวกับ Lucene
  • คิวรีภาษาธรรมชาติ: รองรับการจัดการคิวรีที่ซับซ้อนได้อย่างเป็นธรรมชาติ
  • คิวรีช่วงและฟิลด์แฟเซตแบบลำดับชั้น: รองรับชนิดข้อมูลที่หลากหลาย
  • ที่เก็บเอกสารแบบบีบอัด: รองรับวิธีบีบอัดหลายแบบ เช่น LZ4, Zstd
  • ฟิลด์ JSON และตัวรวบรวมการรวมข้อมูล: รองรับ histogram, range bucket, ค่าเฉลี่ย และเมตริกทางสถิติ

สิ่งที่ไม่รองรับ

  • การค้นหาแบบกระจายศูนย์อยู่นอกขอบเขตของ Tantivy หากต้องการการค้นหาแบบกระจายศูนย์ให้ดู Quickwit

เริ่มต้นใช้งาน

  • Tantivy ทำงานบน Rust รุ่นเสถียร และรองรับ Linux, macOS, Windows
  • tantivy-cli: มีอินเทอร์เฟซบรรทัดคำสั่งสำหรับสร้างเอนจินค้นหา ทำดัชนี และค้นหาได้อย่างง่ายดาย
  • เอกสารอ้างอิง: มีเอกสารอ้างอิงสำหรับเวอร์ชันรีลีสล่าสุด

วิธีสนับสนุนโปรเจ็กต์

  • ใช้งาน Tantivy และแบ่งปันประสบการณ์
  • ส่งรายงานบั๊ก
  • เขียนบล็อกโพสต์
  • ช่วยด้านเอกสาร
  • ร่วมพัฒนาโค้ด

การร่วมพัฒนาโค้ด

  • ใช้เวิร์กโฟลว์ GitHub Pull Request
  • เมื่อมีส่วนร่วม ให้ อ้างอิง GitHub ticket และเขียนข้อความ commit ที่ครอบคลุม

FAQ

  • รองรับภาษาอื่น: มี language binding สำหรับหลายภาษา เช่น Python, Ruby
  • ตัวอย่างการใช้งาน: ถูกใช้ในหลายโปรเจ็กต์ เช่น seshat, tantiny, lnx
  • การเปรียบเทียบความเร็ว: เร็วกว่า Lucene ประมาณ 2 เท่า
  • รองรับ incremental indexing: ใช่
  • การแก้ไขเอกสาร: เอกสารเป็นแบบ immutable ต้องลบแล้วทำดัชนีใหม่
  • ค้นหาได้เมื่อใดระหว่างการทำดัชนี: ค้นหาได้หลังเรียก commit

ความเห็นของ GN⁺

  • ประสิทธิภาพสูงบนพื้นฐาน Rust: เป็นเอนจินค้นหาที่รวดเร็วโดยใช้ประโยชน์จากประสิทธิภาพและความปลอดภัยของ Rust จึงเหมาะกับโปรเจ็กต์ที่ให้ความสำคัญกับประสิทธิภาพ
  • รองรับหลายภาษา: ใช้งานได้ในหลายสภาพแวดล้อมผ่าน language binding เช่น Python, Ruby
  • incremental indexing: เป็นฟีเจอร์ที่มีประโยชน์เมื่อต้องจัดการข้อมูลขนาดใหญ่
  • ความเป็น immutable ของเอกสาร: ช่วยรักษาความสอดคล้องของข้อมูล แต่หากแก้ไขเอกสารต้องทำดัชนีใหม่
  • การทำงานร่วมกับ Quickwit: หากต้องการการค้นหาแบบกระจายศูนย์ การใช้ร่วมกับ Quickwit เป็นทางเลือกที่ดี

1 ความคิดเห็น

 
GN⁺ 2024-05-28
ความคิดเห็นจาก Hacker News
  • แชร์ประสบการณ์โปรเจกต์: เคยใช้ไลบรารีนี้สร้าง <a href="https://progscrape.com" rel="nofollow">progscrape.com</a> ขึ้นใหม่เพื่อแทนที่โค้ดเบส Python2 AppEngine รุ่นเก่า ไลบรารีนี้เร็วมาก และสามารถทำดัชนีเรื่องราว 1M รายการบน Raspberry Pi ได้ในเวลาไม่กี่วินาที การใช้ CPU ต่ำมาก และประสิทธิภาพการค้นหาก็ยอดเยี่ยม

  • ParadeDB และ Tantivy: เพิ่งได้รู้จัก Tantivy ผ่าน ParadeDB (ส่วนขยายของ Postgres) เมื่อไม่นานมานี้ โดยถูกใช้เพื่อขยาย Postgres สำหรับงานวิเคราะห์ประสิทธิภาพสูง

  • Quickwit และ Clickhouse: ในโปรเจกต์ค้นหาแบบหลายภาษา ประสิทธิภาพที่ได้จากการใช้ Quickwit ร่วมกับ Clickhouse นั้นดีมาก โดยเฉพาะมีประโยชน์กับการค้นหาภาษาจีน ญี่ปุ่น และเกาหลี

  • ข้อจำกัดของ to_tsvector: to_tsvector ของ PostgreSQL ไม่ค่อยเหมาะกับบางกรณีการใช้งาน ขอให้ Tantivy ประสบความสำเร็จ

  • การดีพลอย Quickwit ใน production: เคยใช้ Quickwit ทำดัชนีวัตถุนับพันล้านรายการ ทั้งความเร็วในการทำดัชนีและ latency ของคิวรีอยู่ในระดับแข่งขันได้ การแยก compute ออกจาก storage มีประโยชน์มาก

  • ประสิทธิภาพของ Tantivy: ประทับใจกับประสิทธิภาพของ Tantivy และความทุ่มเทของผู้ก่อตั้ง มั่นใจว่าทีมจะประสบความสำเร็จ

  • การค้นหาแบบ trigram ของ Etsy/Hound: เคยมีประสบการณ์ใช้ดัชนีค้นหาแบบ trigram ในภาษา Go ที่อิงจากการจับคู่ regular expression ของ Russ Cox

  • เหตุผลที่เลือก Tantivy: เลือก Tantivy เพราะผิดหวังกับการใช้ทรัพยากรของ Elasticsearch อีกทั้งอยากทำโปรเจกต์ด้วย Rust และ Tantivy ก็มีทั้งประสิทธิภาพและเอกสารประกอบที่ดีมาก

  • ปัญหาการอัปเกรด Lucene และ Solr: Lucene และ Solr รองรับการอัปเกรดดัชนีได้ไม่ดีนัก สำหรับโปรเจกต์ขนาดใหญ่จำนวนมาก การทำดัชนีใหม่มีต้นทุนสูงมาก และบางครั้งก็เป็นไปไม่ได้

  • ข้อจำกัดในการเพิ่ม/ลบฟิลด์: ใน Tantivy ไม่สามารถเพิ่มหรือลบฟิลด์ได้ และต้องทำดัชนีข้อมูลทั้งหมดใหม่ลงในดัชนีค้นหาอีกชุดหนึ่ง

  • ทางเลือกแทน Meilisearch: มองหา Tantivy เป็นทางเลือกแทน Meilisearch เพราะปัญหาเรื่อง telemetry และดูเหมือนว่าการตั้งค่าจะง่าย

  • LanceDb และ Tantivy: ผลิตภัณฑ์ฐานข้อมูลเวกเตอร์ชื่อ LanceDb ใช้ Tantivy เพื่อให้ความสามารถด้านการค้นหาแบบ full-text ตอนนี้ทำได้ผ่าน Python binding เท่านั้น แต่มีแผนจะทำ Rust binding