یک مثال عملی با استفاده از جستجوی اطلس MongoDB

بیایید بگوییم که شما در حال ساختن یک پروژه هستید که چیزهای زیادی در آن داشته باشد ، به عنوان مثال ، یک وبلاگ ، مجموعه های موجود در پایگاه داده شما ممکن است “کاربران” و “پست” باشند و این به تنهایی برای پایگاه داده شما کافی است. اکنون ، با رشد سایت شما ، ممکن است بخواهید:
عملکردی را اجرا کنید که پست های مشابه آنچه را که کاربر به تازگی بر اساس کلمات کلیدی خوانده است ، به منظور نگه داشتن کاربر در سایت شما ، واگذار می کند.
شما همچنین می خواهید شرایطی را دوست داشته باشید که کاربران شما بتوانند به راحتی یک موضوع را جستجو کنند و نتیجه ای کسب کنند که بسیار مربوط به آنچه می خواهند باشد.
شما می خواهید یک خودکار کامل به عنوان کاربران عبارت جستجوی خود را تایپ کنید.
همه اینها و موارد دیگر را می توان انجام داد ، اما در شرایطی که یک بازه زمانی باریک دارید ، آیا می توانید همه اینها را به طور کامل پیاده سازی کنید و همچنین می توانید مانند برجسته کردن عبارت جستجوی کاربر ، خودکار در کادر جستجو ، فازی ، طعم آن را به آن اضافه کنید. جستجو (وضعیتی که به موجب آن با هجی های اشتباه ، مترادف و موارد دیگر مطابقت داشته باشید) ، برای اینکه کمی شما را دلسرد نکنید ، این یک جستجوی متن کامل خواهد بود و نه فقط یک جستجو که در آن با کلمات کلیدی ، شناسه ها یا کل رشته مطابقت داشته باشید ، این را در ذهن داشته باشید هنگامی که یک کاربر در حال جستجو است ، با مقایسه رمز عبور برای تأیید اعتبار (جایی که جایی برای خطا نمی کنید) کاملاً متفاوت است ، احتمالاً کاربران اشتباه می کنند یا در جستجوی خود از عبارت اشتباه استفاده می کنند ، آیا توابع شما مقیاس پذیر است و قبل از اینکه درگیر یک کار بی پایان شوید که ممکن است میوه ای را که تصور می کنید ، اجرا شود ، همه اینها باید بر روی شما طلوع کند.
به من اجازه دهید شما را با Atlas Search آشنا کنم: Atlas Search یک جستجوی متن کامل تعبیه شده در اطلس MongoDB است که یک تجربه یکپارچه و مقیاس پذیر برای ساخت ویژگی های برنامه مبتنی بر ارتباط به شما می دهد.
جستجوی Atlas MongoDB یا جستجوی اطلس برای کوتاه ، همانطور که در این پست استفاده می کنیم ، یک جستجوی متن کامل تعبیه شده است که یک تجربه یکپارچه و مقیاس پذیر برای ویژگی های برنامه مبتنی بر ارتباط را به شما می دهد. ممکن است شما مانند من تعجب کنید ، وقتی من برای اولین بار توسط Marcus ، که مدیر ارشد محصول Atlas Search در MongoDB است ، با Atlas Search آشنا شدم ، احساس دلتنگی کردم ، که این یک پایگاه داده کاملاً جدید متفاوت از سند محبوب محور خواهد بود ، nosql mongodb من می دانم ، و این ، نوعی ، من را از حتی امتحان کردن آن دلسرد کرد ، احتمالاً به دلیل عدم دانستن آنچه در ابتدا ارائه می دهد. اما من می توانم به شما بگویم چیزهای بیشتری برای جستجوی اطلس وجود دارد و این ویژگی ای است که شرکت ها مایل به صرف یک ثروت هستند و بدون هیچ هزینه ای برای ما به وجود می آید.
بیایید شیرجه بزنیم ، برای این که این کار ساده روی یک برنامه اصلی کار کنیم ، می توانیم آن را Transearch بنامیم ، این برنامه به عنوان مدیر حساب کار می کند که در آن کاربران می توانند معاملات مانند بدهی یا اعتبار ، عنوان ، توضیحات و مقدار آن را اضافه کنند. همچنین تعادل فعلی را از همه معاملات ذخیره می کند. نکته اصلی اینجاست که نشان می دهد سرعت و آسان می تواند هرگونه معامله با جزئیات کمی که در مورد معامله دارید پیدا کنید.
یک نسخه زنده از این برنامه را می توان در اینجا یافت و کد منبع کامل را می توان از Github دریافت کرد ، در اینجا و اینجا ، سابق مشتری و دومی کد سرور است. جزئیات بیشتر را می توان در بخش readme.md از repo مربوط به GitHub خود یافت.
من از Next.js برای ساخت جلوی و سایر ابزارهای موجود در آن استفاده کردم-UI ، Redux و SASS ، در حالی که در پس زمینه ، از Node.js ، Express ، MongoDB ، Mongoose و Bcryptjs استفاده کردم. نکته اصلی این برنامه نشان دادن این است که ادغام جستجوی اطلس در برنامه شما ، چه برنامه جدید یا یک برنامه موجود ، آسان است. اسناد را برای یک مقدمه سریع بخوانید و بعد از اینکه پروژه را کلون کردید و یک پایگاه داده در MongoDB ایجاد کرده اید ، توابع جستجو را توضیح می دهم:
const fetchTransWithoutSearchPhrase = async (id) => {
await API("post", `transaction/defaultSearchTransaction`, { searchPhrase, company: id })
.then((res) => {
if (res) setSearchResult(res);
})
.catch((err) => {
// console.log(err);
throw "Server failed to process data";
});
};
const fetchTransWithSearchPhrase = async (id) => {
await API("post", `transaction/atlasSearchTransaction`, { searchPhrase, company: id })
.then((res) => {
if (res) setSearchResult(res);
})
.catch((err) => {
// console.log(err);
throw "Server failed to process data";
});
};
const searchHandler = () => {
if (searchPhrase.length) return fetchTransWithSearchPhrase(id);
fetchTransWithoutSearchPhrase(id);
};
همانطور که قبلاً حدس زده اید و درست انجام داده اید ، کاری که این کنترل کننده جستجو در برنامه مشتری انجام می دهد می تواند به دو بخش تقسیم شود ، اولین مورد اصلی است. API از سرور ما. توجه داشته باشید ، ما فقط در صورت داشتن یک عبارت جستجو ، ATLASSEARCH API را از سرور خود صدا می کنیم ، زیرا این خطایی را به وجود می آورد. هنگامی که صفحه معاملات در ابتدا بارگیری می شود ، ما با FetchTranswithSearchPhrase (ID) تماس می گیریم ، پارامتر شناسه که به FetchTranswithSearchPhrase منتقل می کنیم شناسه AUTH ما است. زمان های دیگر که یک عبارت جستجو تعریف نشده است ، ما با نام fetchtranswithoutsearchphrase (ID) تماس می گیریم.
ما فقط وقتی یک عبارت جستجوی معتبر به آن منتقل می شود ، ما با کنترل کننده AtlassearchTransaction تماس می گیریم. توضیح کد ، بر اساس شماره خط در تصویر زیر:
exports.atlasSearchTransaction = async (req, res) => {
try {
const { searchPhrase, company } = req.body;
const agg = [
{
$search: {
text: {
query: searchPhrase,
path: ["title", "keywords", "description"],
fuzzy: {},
},
},
},
{
$project: {
title: 1,
date: 1,
description: 1,
credit: 1,
company: 1,
amount: 1,
balance: 1,
score: {
$meta: "searchScore",
},
},
},
{
$match: {
company,
},
},
{
$sort: {
_id: -1,
},
},
{
$limit: 10,
},
];
await Transaction.aggregate(agg, (err, searchResult) => {
if (err) {
throw err;
} else {
res.status(200).json(searchResult);
}
});
} catch (err) {
return catchError({ res, err, message: "unable to locate masses" });
}
};
- در خط 3 ، ما مسیر جستجو و شرکت را در REQ.Body ، یعنی داده های ارائه شده از مشتری ما FetchTranswithSearchPhrase را تخریب می کنیم.
- در خط 5 ، جمع آوری خود را تعریف می کنیم ، جستجوی $ جایی است که جادو اتفاق می افتد. شیء در متن ، ما توضیح می دهیم که جستجوی ما در مورد چیست. ما به جستجوی جستجوی می پردازیم ، یعنی آنچه کاربر ما در جستجوی آن است ، مسیر به قسمتهای موجود در سند ما اشاره دارد که می خواهیم در برابر آنها جستجو کنیم. هنگامی که فقط یک قسمت است ، می توانید آن را به عنوان یک متن واحد منتقل کنید ، در غیر این صورت یک آرایه مانند آن است: [“title”, “keywords”, “description”]، 'fuzzy: {}' به این واقعیت اشاره دارد که کاربر ممکن است خطای املایی را ایجاد کند ، و نکته بزرگی که Fuzzy انجام می دهد این است که این روش جستجو را به درستی انجام داده و همچنین کلمات مشابه را برگرداند.
- در خط 16 ، پروژه $ به زمینه ای اشاره دارد که می خواهیم از جمع بازگردیم.
- در خط 30 ، ما از $ Match استفاده کردیم ، این کار را انجام دادیم زیرا ما تمام معاملات را در یک مجموعه ذخیره می کنیم که ممکن است ایده آل نباشد ، کاری که می توانیم انجام دهیم ایجاد یک مجموعه منحصر به فرد برای هر کاربر است. در طرح معامله ما ، مسیری برای یک شرکت یا به اصطلاح کاربر داریم و آنچه ما با مسابقه انجام می دهیم این است که اطمینان حاصل کنیم که از صاحب مناسب معامله واکشی می کنیم. توجه داشته باشید ، مسابقه $ یا $ sort نمی تواند قبل از جستجوی $ باشد.
- در خط 35 ، آنچه “$ sort: {_id: -1}” انجام می دهد ، معکوس کردن ترتیب نتیجه ، یعنی نوعی ساختار داده پشته است ، بنابراین آخرین مورد اضافه شده به اولین مورد در آرایه برگشتی تبدیل می شود.
- در خط 40 ، از حد $ برای تعیین حداکثر تعداد اسنادی که می توانند برگردانده شوند استفاده می شود.
- در خط 44 ، گزینه جمع را به مجموعه منتقل می کنیم و با روش جمع تماس می گیریم که یا خطایی را برمی گرداند یا نتیجه می گیرد.
- در خط 48 ، نتیجه را به مشتری ارسال می کنیم.
این نشانگر پایان این بخش است ، امیدوارم که شما دیده باشید که استفاده از جستجوی اطلس در یک پروژه جدید یا موجود چقدر آسان است.