- ส่วนขยาย Postgres ที่พัฒนาด้วย Rust เพื่อยกระดับการค้นหาแบบ Full Text
- ใช้อัลกอริทึม BM25 (ใช้คำนวณคะแนนความเกี่ยวข้องของผลการค้นหา) ที่เสิร์ชเอนจินสมัยใหม่ใช้งาน
- ปัจจุบันการค้นหาบนพื้นฐาน
tsvector ที่ Postgres ใช้อยู่มีปัญหา 2 อย่าง
- ประสิทธิภาพ: ค้นหาบนตารางขนาดใหญ่ได้ช้า
- ความสามารถ: ไม่รองรับการค้นหาแบบ fuzzy, การปรับแต่งความเกี่ยวข้อง หรือคะแนนความเกี่ยวข้องแบบ BM25
- เป้าหมายคืออุดช่องว่างระหว่างความสามารถด้านการค้นหาของ Postgres กับ ElasticSearch เพื่อไม่ให้ต้องนำบริการอย่าง ElasticSearch เข้ามาใน data stack
- ความสามารถของ pg_bm25
- เป็น Postgres Native 100% ไม่มี dependency ภายนอก
- สร้างบน Tantivy ซึ่งเป็นทางเลือกของ Apache Lucene ที่พัฒนาด้วย Rust
- เร็วกว่า
tsquery/ts_rank ซึ่งเป็นฟังก์ชันค้นหา/จัดเรียงพื้นฐานของ Postgres ถึง 20 เท่า สำหรับข้อมูลมากกว่า 1 ล้านแถว
- รองรับการค้นหาแบบ fuzzy, aggregation, highlighting และการปรับแต่งความเกี่ยวข้อง
- ใช้คะแนนความเกี่ยวข้องด้วยอัลกอริทึม BM25 แบบเดียวกับที่ ElasticSearch ใช้
- การค้นหาแบบเรียลไทม์: ข้อมูลใหม่ค้นหาได้ทันทีโดยไม่ต้อง reindex ด้วยตนเอง
3 ความคิดเห็น
ดูเหมือนว่ายังรองรับแค่ภาษาอังกฤษ และในเอกสารระบุว่า tokenizer แบบ
chinese_compatibleกำลังอยู่ระหว่างพัฒนานอกจากนี้ขนาด Docker image ก็ค่อนข้างใหญ่มาก เกือบ 8GB เลยทีเดียว; ถ้าเทียบกับอิมเมจ Postgres แบบดั้งเดิมที่ยังไม่ถึง 400MB ก็ชวนให้สงสัยว่าเขาใส่อะไรเพิ่มเข้าไปบนนั้นกันแน่...
ดีเลย...!
หวังว่าจะมีการรองรับบน DBMS แบบจัดการเองอย่าง RDS เร็ว ๆ นี้นะ!