في هذا الفصل، سنقدم بحث نصوص MongoDB الكامل، والذي يختلف عن "like" الموجود في SQL. بحث نصوص MongoDB الكامل أكثر كفاءة في البحث عن النصوص مقارنة بتنفيذ "like" في SQL.
إعداد بيانات الاختبار
أدخل عدة سجلات في مجموعة المتاجر
db.stores.insert(
[
{ _id: 1, name: "جافا هات", description: "قهوة وكعك" },
{ _id: 2, name: "بورغر بانز", description: "هامبرغر فاخرة" },
{ _id: 3, name: "متجر القهوة", description: "مجرد قهوة" },
{ _id: 4, name: "ملابس ملابس ملابس", description: "ملابس بخصم" },
{ _id: 5, name: "تسوق جافا", description: "بضائع إندونيسية" }
]
)
إنشاء فهرس نصوص
لاستخدام قدرة البحث الكامل في النص، تحتاج إلى إنشاء فهرس نص. مثال:
db.stores.createIndex( { name: "text", description: "text" } )
شرح:
- إنشاء فهرس نوع النص لحقول الاسم والوصف.
ملاحظة: تسمح المجموعة بفهرس نص واحد فقط، ولكن يمكن للفهرس النصي أن يشمل عدة حقول.
المشغل $text
استخدم مشغل $text للبحث عن النص.
الصيغة:
{ $text: { $search: "كلمة البحث" } }
مثال:
db.stores.find( { $text: { $search: "جافا متجر قهوة" } } )
شرح:
- البحث عن وثائق تحتوي على كلمات "قهوة"، "متجر"، و"جافا" في حقول الاسم والوصف.
النتيجة:
{ "_id" : 3, "name" : "متجر القهوة", "description" : "مجرد قهوة" }
{ "_id" : 1, "name" : "جافا هات", "description" : "قهوة وكعك" }
{ "_id" : 5, "name" : "تسوق جافا", "description" : "بضائع إندونيسية" }
البحث عن عبارات
db.stores.find( { $text: { $search: "\"متجر قهوة\"" } } )
النتيجة
{ "_id" : 3, "name" : "متجر القهوة", "description" : "مجرد قهوة" }
فرز الأهمية
بشكل افتراضي، نتائج استعلام $text غير مرتبة. يحسب استعلام $text درجة (textScore) لأهمية كل وثيقة. يمكننا استخدام هذه الدرجة لفرز وعرض الوثائق ذات الأهمية الأعلى في الأعلى.
db.stores.find(
{ $text: { $search: "جافا متجر قهوة" } },
{ score: { $meta: "textScore" } } // يعلن لإرجاع درجة الأهمية textScore
).sort( { score: { $meta: "textScore" } } ) // تحديد الفرز باستخدام textScore
ملاحظة: بحث نصوص MongoDB لا يوفر دعمًا جيدًا جدًا لعبارات اللغة الصينية.