برنامه نویسی

شیرجه عمیق به Fuse.js: موارد استفاده پیشرفته و معیار

مقدمه

جستجو و فیلتر کردن داده ها به طور کارآمد یک ویژگی مهم در برنامه های وب مدرن است. هنگام کار با مجموعه داده های بزرگ ، اجرای یک مکانیسم جستجوی انعطاف پذیر و عملکردی ضروری است. یکی از بهترین کتابخانه های جستجوی فازی در سمت مشتری موجود است fuse.jsبشر برخلاف روشهای جستجوی سنتی ، fuse.js تطبیق تقریبی ، تحمل تایپی و تکنیک های پیشرفته امتیاز دهی را امکان پذیر می کند.

در حالی که راهنماهای بی شماری وجود دارد که به صورت آنلاین در دسترس است که شامل استفاده اساسی است ، این مقاله به بررسی موارد پیچیده استفاده در دنیای واقعی می پردازد fuse.js، از جمله جستجوهای وزنی چند میدانی ، پیاده سازی های جستجوی ترکیبی و معیار عملکرد در برابر جاوا اسکریپت بومی و لوداشبشر


موارد استفاده پیشرفته از fuse.js

1. جستجوی وزنه بردار چند میدانی با پیکربندی پویا

در برنامه های دنیای واقعی ، جستجو در زمینه های مختلف با ارتباط متفاوت یک نیاز متداول است. fuse.js فراهم می کند سیستم وزنی، به توسعه دهندگان اجازه می دهد تا سطح اهمیت متفاوتی را به زمینه ها اختصاص دهند.

🔹 سناریو: تصور کنید پلت فرم تجارت الکترونیکی جایی که کاربران محصولات را جستجو می کنند. عنوان محصول باید از اهمیت بالاتری نسبت به دسته یا توضیحات برخوردار باشد.

const Fuse = require('fuse.js');

const products = [
  { title: "\"Apple iPhone 15\", category: \"Smartphones\", description: "\"Latest Apple iPhone with A16 Bionic chip\" },\""
  { title: "\"Samsung Galaxy S23\", category: \"Smartphones\", description: "\"Premium Android phone with Snapdragon 8 Gen 2\" },\""
  { title: "\"Dell XPS 15\", category: \"Laptops\", description: "\"Powerful ultrabook for professionals\" },\""
];

const options = {
  keys: [
    { name: "title", weight: 0.7 }, // Higher priority
    { name: "category", weight: 0.2 },
    { name: "description", weight: 0.1 }
  ],
  threshold: 0.3, // Adjust sensitivity
};

const fuse = new Fuse(products, options);
console.log(fuse.search("Apple"));
حالت تمام صفحه را وارد کنید

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

🔹 چرا این مهم است:

  • در مورد توضیحات برای ارتباط بهتر جستجوی ، به عناوین محصول اولویت می دهد.
  • به تصحیح نتایج جستجو بدون استفاده از کاربران بیش از حد با مسابقات بی ربط کمک می کند.

2. جستجوی ترکیبی: fuse.js با نمایش داده های پایگاه داده

برای مجموعه داده های بزرگ ، جستجوی سمت مشتری به تنهایی کافی نیستبشر یک رویکرد ترکیبی – ترکیب fuse.js با فیلتر کردن سمت سرور (نمایش داده های SQL یا NOSQL)– نتایج بهینه نتایج.

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

  1. انجام فیلتر اولیه در پایگاه داده (به عنوان مثال ، MongoDB یا PostgreSQL).
  2. درخواست کردن جستجوی فازی در مشتری برای تحمل تایپی و رتبه بندی.
async function hybridSearch(query) {
  // Step 1: Fetch potential matches from the database
  const dbResults = await fetch(`/api/movies?search=${query}`).then(res => res.json());

  // Step 2: Apply fuzzy search on fetched results
  const fuse = new Fuse(dbResults, { keys: ["title", "actors", "genres"], threshold: 0.4 });
  return fuse.search(query);
}

// Example Usage
hybridSearch("The Avengr").then(results => console.log(results));
حالت تمام صفحه را وارد کنید

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

🔹 مزایا:

  • محاسبه غیر ضروری مشتری را کاهش می دهد.
  • عملکرد را با استفاده از پرس و جوهای فهرست بندی شده در بانکهای اطلاعاتی بهبود می بخشد.
  • تحمل تایپی و رتبه بندی از طریق fuse.js بعد از فیلتر سرور

3. جستجوی ناهمزمان و جریان برای مجموعه داده های بزرگ

هنگام رسیدگی به هزاران یا میلیون ها سوابق ، بارگیری همه چیز در حافظه غیر عملی استبشر یک رویکرد بهتر است جریان نتایج جستجو به صورت پویا با استفاده از fuse.js با واکشی ناهمزمان.

🔹 سناریو: بوها داشبورد بازار سهام در زمان واقعی که باید هزاران نماد سهام را جستجو کند بدون مسدود کردن ارائه UIبشر

async function liveSearch(query) {
  const response = await fetch(`/api/stocks?search=${query}`); // Paginated or chunked results
  const stockList = await response.json();

  const fuse = new Fuse(stockList, { keys: ["symbol", "company"], threshold: 0.2 });
  return fuse.search(query);
}

// Usage
document.getElementById("searchBox").addEventListener("input", async (event) => {
  const results = await liveSearch(event.target.value);
  console.log(results);
});
حالت تمام صفحه را وارد کنید

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

🔹 چرا این کارآمد است:

  • به جای بارگیری همه سهام به یکباره ، فقط بخش های مربوطه از سرور خارج می شوندبشر
  • fuse.js اعمال می شود فقط در زیر مجموعه بازیابی شده، جلوگیری از استفاده بیش از حد از حافظه.
  • پاسخگویی UI را بهبود می بخشد و باعث می شود جستجو در زمان واقعی احساس شود.

معیار: FUSE.JS در مقابل بومی JavaScript در مقابل Lodash

تنظیم تست

ما مقایسه می کنیم fuse.jsبا جاوا اسکریپت بومی (جستجوی مبتنی بر Regex)وت Lodash's _.filter از نظر:

  • زمان اعدام
  • استفاده از حافظه
  • دقت در تطبیق فازی

ما از یک مجموعه داده استفاده می کنیم 100000 رکورد با تغییرات مختلف نام برای آزمایش.

کتابخانه زمان پرس و جو (MS) استفاده از حافظه (MB) پشتیبانی تطبیق فازی
جاوا اسکریپت بومی (Regex) 12M 10 مگابایت ❌ نه (فقط مسابقه دقیق)
Lodash (_.filter) 18M 15 مگابایت ❌ نه (فیلتر اساسی)
fuse.js 35MS 25 مگابایت ✅ بله (تحمل تایپی ، امتیاز دهی ، وزنه برداری)

مشاهدات:

  1. JS بومی (مبتنی بر Regex) سریعترین است اما فاقد تحمل تایپی است.
  2. Lodash برای فیلتر ساختار یافته عملکرد خوبی دارد اما برای جستجوی فازی ساخته نشده است.
  3. fuse.js کندتر از تطبیق دقیق است اما برتری در رتبه بندی هوشمند و جستجوی تقریبیبشر

نتیجه گیری: چه موقع از fuse.js استفاده می شود؟

fuse.js برای:

عملکرد جستجوی کاربر جایی که تحمل تایپی اهمیت دارد (به عنوان مثال ، تجارت الکترونیکی ، جستجوی اسناد).

جستجوهای چند میدانی وزنه بردار جایی که ویژگی های مختلف دارای سطح اهمیت متفاوتی هستند.

رویکردهای جستجوی ترکیبی، جایی که ترکیبی از فیلتر پایگاه داده و جستجوی فازی سمت مشتری لازم است

از استفاده از FUSE.js جلوگیری کنید:

⛔ فقط شما نیاز دارید مسابقات دقیق (Regex یا Lodash سریعتر خواهد بود).

⛔ مجموعه داده است برای پردازش سمت مشتری بسیار بزرگ است (از یک جستجوی تحت حمایت پایگاه داده مانند Elasticsearch استفاده کنید).

⛔ عملکرد نگرانی اصلی در مورد رتبه بندی هوشمند است.


افکار نهایی

fuse.js ابزاری عالی برای جستجوی هوشمندانه و فازی، انجام جستجوهای کاربر بخشنده تر و مؤثرتر. در حالی که ممکن است سریعترین راه حل نباشد ، آن دقت و انعطاف پذیری آن را ضروری می کند برای برنامه های سنگین جستجو.

اگر عملکرد یک نگرانی است ، مدل های ترکیبی ترکیبی از فیلتر بانک اطلاعاتی با fuse.js بهترین تعادل بین سرعت و دقت را ارائه دهید.

آیا در پروژه بعدی خود از fuse.js استفاده می کنید؟ بیایید بحث کنیم! 🚀

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

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

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

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