Meilisearch: ทำระบบค้นหาบทความที่ตอบไวและจัดอันดับได้
วางดัชนีบทความด้วย Meilisearch ตั้งแต่เพิ่มเอกสาร ค้นหา ตั้งค่า filter ไปจนถึงตรวจงาน index แบบ asynchronous
เมื่อเว็บมีบทความหลายร้อยเรื่อง การใช้ %keyword% กับฐานข้อมูลหลักอาจตอบโจทย์ไม่ครบทั้งเรื่องสะกดคลาดเคลื่อน ลำดับความเกี่ยวข้อง และตัวกรอง Meilisearch เป็น search engine โอเพนซอร์สที่รับเอกสารเข้า index แล้วให้ API สำหรับค้นหา งานตัวอย่างนี้คือแสดงผลบทความที่เผยแพร่แล้วพร้อมตัวกรองหมวดหมู่
วางข้อมูลที่จะเข้า index
ให้ฐานข้อมูลบทความเป็นแหล่งความจริง ส่วน Meilisearch เป็นสำเนาสำหรับค้นหา เอกสารหนึ่งชิ้นควรมี id คงที่ ชื่อเรื่อง สรุป เนื้อหาที่ต้องค้น หมวดหมู่ และสถานะเผยแพร่ อย่าส่ง draft หรือข้อมูลที่ผู้ใช้ทั่วไปไม่ควรเห็นเข้า index สาธารณะ ตัวอย่าง payload:
{"id": 42, "title": "เริ่มต้น Docker", "summary": "รันแอปในคอนเทนเนอร์", "category": "คู่มือ", "published": true}
ส่งเอกสารเข้า endpoint ของ index แล้วตรวจ task ที่ระบบตอบกลับ Meilisearch ทำงาน index แบบ asynchronous ดังนั้น HTTP ที่รับคำขอสำเร็จยังไม่ได้หมายความว่าเอกสารค้นเจอทันที ฝั่ง importer ต้องรอ task สำเร็จและบันทึกข้อผิดพลาดแยกต่างหาก จากนั้นลองค้นคำในชื่อเรื่องและคำที่มีในสรุปเพื่อตรวจคุณภาพผลลัพธ์
ตั้งค่าค้นหาและตัวกรอง
- สร้าง index สำหรับบทความและกำหนด primary key เป็น
idก่อนนำเข้าชุดใหญ่ - เลือก field ที่ค้นได้ โดยให้น้ำหนักชื่อเรื่องมากกว่าเนื้อหายาวตามพฤติกรรมผู้ใช้จริง
- หากต้อง filter ตาม
categoryหรือpublishedต้องกำหนด field เหล่านี้เป็น filterable attributes ก่อนส่งคำค้นที่ใช้ filter - ทดสอบคำไทย คำอังกฤษ คำสะกดผิด และชื่อผลิตภัณฑ์ที่มีเครื่องหมายพิเศษด้วยชุดคำค้นจาก log จริง
- เมื่อแก้บทความหรือถอนเผยแพร่ ให้ update หรือลบเอกสารใน index และติดตาม task จนเสร็จ
ผลลัพธ์ควรมี title, snippet และ URL ที่สร้างจากแหล่งข้อมูลเดียวกัน อย่าให้ snippet แสดงข้อมูลจาก draft เก่าที่ถูกลบออกในฐานข้อมูลแล้ว หากหน้าบทความเปลี่ยน slug ให้มีขั้นตอนลบเอกสารเดิม มิฉะนั้นผู้ใช้จะกดเข้า 404
ความปลอดภัยและการดูแล
แยก API key ที่ใช้ค้นจาก key ที่จัดการเอกสาร อย่าใส่ admin/master key ใน JavaScript หน้าเว็บ และจำกัดสิทธิ์ของ importer เท่าที่จำเป็น การเปิด search API ให้สาธารณะยังต้องคิดเรื่อง rate limit และข้อมูลที่สามารถดึงออกจาก index ได้ การจัดอันดับที่ดูดีในข้อมูล 20 เรื่องอาจไม่ดีเมื่อมี 2,000 เรื่อง จึงควรเก็บชุดคำค้นทดสอบและทบทวนผลหลังเพิ่มบทความใหม่เป็นระยะ
อ่านเพิ่มเติม: Quick start ของ Meilisearch, การเพิ่มเอกสาร, การตั้งค่าดัชนี