دوره‌ها / MongoDB / Full-text Search (Full-text Search)

Full-text Search (Full-text Search)

15 دقیقه Article

Full-text Search: جستجوی متنی کامل 🔤

Full-text Search برای جستجوی متن در documents استفاده می‌شود. این به شما امکان می‌دهد در محتوای متنی documents جستجو کنید.

ساخت Text Index:

// Text index روی یک فیلد
db.articles.createIndex({ title: "text" })

// Text index روی چند فیلد
db.articles.createIndex({ title: "text", content: "text" })

// Text index با weights (اهمیت فیلدها)
db.articles.createIndex(
  { title: "text", content: "text" },
  { weights: { title: 10, content: 5 } }  // title مهم‌تر است
)

جستجوی متنی:

// جستجوی ساده
db.articles.find({ $text: { $search: "MongoDB" } })

// جستجوی چند کلمه (OR - هر کدام)
db.articles.find({ $text: { $search: "MongoDB tutorial" } })

// جستجو با exact phrase
db.articles.find({ $text: { $search: '"MongoDB tutorial"' } })

// جستجو با exclusion (کلمه منفی)
db.articles.find({ $text: { $search: "MongoDB -tutorial" } })  // MongoDB اما نه tutorial

جستجو با Score:

// جستجو با textScore (relevance score)
db.articles.find(
  { $text: { $search: "MongoDB" } },
  { score: { $meta: "textScore" } }
).sort({ score: { $meta: "textScore" } })

// فیلتر کردن بر اساس score
db.articles.find({
  $text: { $search: "MongoDB" },
  score: { $meta: "textScore", $gt: 1.0 }
})

محدودیت‌ها:

  • فقط یک text index در هر collection
  • نمی‌توانید text index را در compound index استفاده کنید (مگر اینکه همه فیلدها text باشند)
  • Case-insensitive است
  • Stop words (مثل "the", "a") نادیده گرفته می‌شوند
💡 نکته: برای جستجوی پیشرفته‌تر (مثل fuzzy search، synonyms، faceted search)، می‌توانید از MongoDB Atlas Search استفاده کنید که بر پایه Lucene است.
✅ یاد گرفتید: Full-text Search برای جستجوی متنی در documents استفاده می‌شود و به شما امکان می‌دهد محتوا را بر اساس relevance مرتب کنید!

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

تمرین: Full-text Search Medium
سوال تمرین

🎯 تمرین: جستجوی متنی

یک text index بسازید و جستجو کنید.

پاسخ تمرین
JAVASCRIPT
// Text Index
db.articles.createIndex({ title: "text", content: "text" })

// جستجو
db.articles.find({ $text: { $search: "mongodb tutorial" } })

// با score
db.articles.find(
    { $text: { $search: "mongodb" } },
    { score: { $meta: "textScore" } }
).sort({ score: { $meta: "textScore" } })

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.