เพิ่มประสิทธิภาพคิวรีซับซ้อนด้วย Text Index
เมื่อต้องการค้นหาข้อความในฟิลด์ที่ไม่มีดัชนี ให้สร้าง Text Index เพื่อให้การค้นหาด้วย $text และ $search ทำงานได้อย่างมีประสิทธิภาพ
ตัวอย่างสร้างข้อมูลและ Text Index
> db.demo400.insertOne({ SubjectName: "Java Spring" });
> db.demo400.insertOne({ SubjectName: "Spring Hibernate" });
> db.demo400.insertOne({ SubjectName: "Java Hibernate" });
> db.demo400.createIndex({ SubjectName: "text" });
แสดงข้อมูลทั้งหมด
> db.demo400.find();
ผลลัพธ์:
{ "_id": ObjectId("..."), "SubjectName": "Java Spring" }
{ "_id": ObjectId("..."), "SubjectName": "Spring Hibernate" }
{ "_id": ObjectId("..."), "SubjectName": "Java Hibernate" }
คำสั่งค้นหาข้อความ "Spring" ด้วย Text Search
> db.demo400.find({ $text: { $search: "Spring" } });
ผลลัพธ์ที่ได้
{ "_id": ObjectId("..."), "SubjectName": "Spring Hibernate" }
{ "_id": ObjectId("..."), "SubjectName": "Java Spring" }
คุณสมบัติของ Text Index
- ค้นหาคำได้แม้อยู่กลางประโยค (ไม่ใช่แค่ prefix)
- รองรับ stemming (ค้นหา "running" เจอ "run")
- รองรับ phrase search ด้วยคำพูด:
$search: "\"Java Spring\"" - สามารถกำหนด weight ให้ฟิลด์ต่างๆ ได้
- มีข้อจำกัด: 1 คอลเลกชันมี Text Index ได้สูงสุด 1 ตัว
สร้าง Text Index หลายฟิลด์
> db.demo400.createIndex({ SubjectName: "text", Description: "text" });
จะค้นหาได้ทั้ง 2 ฟิลด์พร้อมกัน