Full-text Search (Full-text Search)
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" } })
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.