ในบทนี้เราจะแนะนำเกี่ยวกับการค้นหาข้อความแบบเต็มของ MongoDB ซึ่งต่างจากตัวดำเนินการ "like" ใน SQL ค้นหาข้อความแบบเต็มของ MongoDB มีประสิทธิภาพมากกว่าในการค้นหาข้อความเมื่อเทียบกับการใช้ "like" ใน SQL
เตรียมข้อมูลทดสอบ
แทรกบางรายการลงในคอลเลคชัน stores
db.stores.insert(
[
{ _id: 1, name: "Java Hut", description: "กาแฟและเค้ก" },
{ _id: 2, name: "Burger Buns", description: "เบอร์เกอร์มาตรฐานสูง" },
{ _id: 3, name: "Coffee Shop", description: "กาแฟเท่านั้น" },
{ _id: 4, name: "Clothes Clothes Clothes", description: "เสื้อผ้าราคาถูก" },
{ _id: 5, name: "Java Shopping", description: "สินค้าชาวอินโดนีเซีย" }
]
)
สร้างดัชนีข้อความ
เพื่อใช้ความสามารถในการค้นหาข้อความแบบเต็ม คุณจำเป็นต้องสร้างดัชนีข้อความ ตัวอย่าง:
db.stores.createIndex( { name: "text", description: "text" } )
คำอธิบาย:
- สร้างดัชนีประเภทข้อความสำหรับฟิลด์ name และ description
หมายเหตุ: คอลเลคชันอนุญาตให้มีดัชนีข้อความเพียงหนึ่งตัวเท่านั้น แต่ดัชนีข้อความสามารถรวมหลายฟิลด์ได้
ตัวดำเนินการ $text
ใช้ตัวดำเนินการ $text สำหรับการค้นหาข้อความ
รูปแบบ:
{ $text: { $search: "คำค้นหา" } }
ตัวอย่าง:
db.stores.find( { $text: { $search: "java coffee shop" } } )
คำอธิบาย:
- ค้นหาเอกสารที่มีคำค้นหา "กาแฟ ร้าน" และ "Java" ในฟิลด์ name และ description
ผลลัพธ์:
{ "_id" : 3, "name" : "Coffee Shop", "description" : "กาแฟเท่านั้น" }
{ "_id" : 1, "name" : "Java Hut", "description" : "กาแฟและเค้ก" }
{ "_id" : 5, "name" : "Java Shopping", "description" : "สินค้าชาวอินโดนีเซีย" }
ค้นหาวลี
db.stores.find( { $text: { $search: "\"กาแฟ ร้าน\"" } } )
ผลลัพธ์
{ "_id" : 3, "name" : "Coffee Shop", "description" : "กาแฟเท่านั้น" }
เรียงลำดับความสำคัญ
ตามค่าเริ่มต้น ผลลัพธ์ของคิวรี $text จะไม่เรียงลำดับ คิวรี $text คำนวณคะแนน (textScore) สำหรับความสัมพันธ์ของเอกสารแต่ละรายการ เราสามารถใช้คะแนนนี้ในการเรียงลำดับและแสดงเอกสารที่มีความสัมพันธ์สูงขึ้นที่สุดได้
db.stores.find(
{ $text: { $search: "java coffee shop" } },
{ score: { $meta: "textScore" } } // ประกาศคืนค่าคะแนนความสัมพันธ์ textScore
).sort( { score: { $meta: "textScore" } } ) // ระบุการเรียงลำดับโดยใช้ textScore
หมายเหตุ: การค้นหาข้อความแบบเต็มของ MongoDB ไม่มีการสนับสนุนที่ดีมากสำหรับวลีภาษาจีน