برنامه نویسی

یک مثال عملی با استفاده از جستجوی اطلس 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" });
  }
};
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  1. در خط 3 ، ما مسیر جستجو و شرکت را در REQ.Body ، یعنی داده های ارائه شده از مشتری ما FetchTranswithSearchPhrase را تخریب می کنیم.
  2. در خط 5 ، جمع آوری خود را تعریف می کنیم ، جستجوی $ جایی است که جادو اتفاق می افتد. شیء در متن ، ما توضیح می دهیم که جستجوی ما در مورد چیست. ما به جستجوی جستجوی می پردازیم ، یعنی آنچه کاربر ما در جستجوی آن است ، مسیر به قسمتهای موجود در سند ما اشاره دارد که می خواهیم در برابر آنها جستجو کنیم. هنگامی که فقط یک قسمت است ، می توانید آن را به عنوان یک متن واحد منتقل کنید ، در غیر این صورت یک آرایه مانند آن است: [“title”, “keywords”, “description”]، 'fuzzy: {}' به این واقعیت اشاره دارد که کاربر ممکن است خطای املایی را ایجاد کند ، و نکته بزرگی که Fuzzy انجام می دهد این است که این روش جستجو را به درستی انجام داده و همچنین کلمات مشابه را برگرداند.
  3. در خط 16 ، پروژه $ به زمینه ای اشاره دارد که می خواهیم از جمع بازگردیم.
  4. در خط 30 ، ما از $ Match استفاده کردیم ، این کار را انجام دادیم زیرا ما تمام معاملات را در یک مجموعه ذخیره می کنیم که ممکن است ایده آل نباشد ، کاری که می توانیم انجام دهیم ایجاد یک مجموعه منحصر به فرد برای هر کاربر است. در طرح معامله ما ، مسیری برای یک شرکت یا به اصطلاح کاربر داریم و آنچه ما با مسابقه انجام می دهیم این است که اطمینان حاصل کنیم که از صاحب مناسب معامله واکشی می کنیم. توجه داشته باشید ، مسابقه $ یا $ sort نمی تواند قبل از جستجوی $ باشد.
  5. در خط 35 ، آنچه “$ sort: {_id: -1}” انجام می دهد ، معکوس کردن ترتیب نتیجه ، یعنی نوعی ساختار داده پشته است ، بنابراین آخرین مورد اضافه شده به اولین مورد در آرایه برگشتی تبدیل می شود.
  6. در خط 40 ، از حد $ برای تعیین حداکثر تعداد اسنادی که می توانند برگردانده شوند استفاده می شود.
  7. در خط 44 ، گزینه جمع را به مجموعه منتقل می کنیم و با روش جمع تماس می گیریم که یا خطایی را برمی گرداند یا نتیجه می گیرد.
  8. در خط 48 ، نتیجه را به مشتری ارسال می کنیم.

این نشانگر پایان این بخش است ، امیدوارم که شما دیده باشید که استفاده از جستجوی اطلس در یک پروژه جدید یا موجود چقدر آسان است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا