رفتن به نوشته‌ها

دسته: MongoDB (مونگو دی‌بی)

اعمال sorting و ترکیب text indexها

ما در قسمت قبل با مفهوم text indexes آشنا شدیم اما نکاتی از آن ها هنوز باقی مانده است که باید مرور کنیم. من این جلسه را با یک کوئری ساده شروع می کنم: db.products.find({$text: {$search: “awesome t-shirt”}}).pretty() ما می دانیم که با اجرای این کوئری، هر دو سند موجود در کالکشن برگردانده می شوند:اگر به این نتایج نگاه کنیم، کلمه ی t-shirt را در نتیجه ی دوم برگردانده شده پیدا می کنیم. در همان نتیجه کلمه ی awesome را نیز داریم. بنابراین هم t-shirt و هم awesome در نتیجه ی دوم وجود دارد در حالی که نتیجه ی اول فقط awesome را دارد. با یک نگاه ساده برای هر انسانی مشخص است که نتیجه ی دوم باید به جای نتیجه ی اول باشد چرا که کلمات بیشتری را دارد که مطابق کوئری ما است اما MongoDB به صورت پیش فرض به این مسئله اهمیتی نمی دهد. راه حل چیست؟ MongoDB در برخورد با ایندکس های رشته ای و جست و جوی آن ها یک مقدار خاص به نام textScore دارد (به معنی «نمره ی متن») که شدت مطابقت رشته ی پیدا شده با کوئری را نشان می دهد. بنابراین اولین مرحله دسترسی به این خصوصیت است که من با projection انجام می دهم: db.products.find({$text: {$search: “awesome t-shirt”}}, {score: {$meta: “textScore”}}).pretty() در اینجا با استفاده از اپراتور meta$ می توانیم به metadata (اطلاعاتی در مورد کوئری و داده های برگردانده شده) دست پیدا کنیم که یکی از آن ها textScore است. با اجرای کوئری بالا نتیجه ی زیر را می گیریم:همانطور که می بینید امتیاز (score) هر نتیجه را نیز برگردانده ایم و همچنین جای نتیجه ها عوض شده است (نتیجه ای که امتیاز بالاتری داشته است، بالاتر قرار گرفته است). در ضمن برای اینکه مطمئن بشویم که نتیجه ی دارای Score بالاتر، به عنوان نتیجه ی اول برگردانده می شود، می توانیم از دستور Sort نیز استفاده کنیم: