مجید
3 هفته پیش توسط مجید مطرح شد
1 پاسخ

جستجوی محصولات

برای جستجوی محصولات چه روشی پیشنهاد میکنید؟
اول اینکه از سرویس های خارجی مثل algolia , Meilisearch استفاده کنیم؟ algolia که آی پی ایران رو بسته در مورد مابقی سرویس ها اگر میدونید قابل استفاده هست راهنمایی بفرمایید.
دوم اینکه آیا اگر بخوایم با laravel scout و با درایور محلی توسعه بدیم چه مزیتی نسبت به روش بدون پکیج( ترکیب like و fulltext search ) داره؟
سوم اینکه آیا بهتر نیست خودمو ن یه ترکیب از کوئری ها ( ترکیب like و fulltext search ) و نرمالایز کردن برای جستجو بصورت دستی بنویسیم؟


ثبت پرسش جدید
محمدجوکار
تخصص : دانشجوی برنامه‌نویسی
@mjokarr 3 هفته پیش آپدیت شد
0

سلام به شما
باز هم به قول چت جی پی تی، چه سوال خوبی پرسیدی. این یعنی داری مثل یه مهندسِ واقعی فکر میکنی😂😂
خب ببین، برای جستجو سه تا مسیر کلی داری:

اولیش همون روش سنتی خود دیتابیسه، یعنی LIKE یا FULLTEXT.
اینا مستقیم با MySQL یا Postgres کار می‌کنن و برای پروژه‌های سبک و کوچیک کاملاً جواب میدن.
LIKE ساده‌ترینه ولی روی دیتای زیاد خیلی کند میشه.
FULLTEXT یه کم حرفه‌ای‌تره، می‌تونه نتایج رو بر اساس شباهت امتیاز بده، ولی باز محدوده، مخصوصاً فکر کنم با زبان فارسی هم کمی مشکل داره (این مورد رو حتتما اگه تصمیم گرفتی بری سمتش تست کن اوله کار).
در کل این روش وقتی که سرور کوچیک یا هاست اشتراکی‌ داری یا نمی‌خوای چیزی نصب کنی خوبه.

راه دوم استفاده از Laravel Scoutه.
همونطور که خودت هم میدونی Scout خودش موتور جستجو نیست، یه لایه‌ی هوشمنده که با یه “درایور” کار می‌کنه.
مثلاً اگه درایورش رو بذاری روی "database"، یعنی جستجوها رو با همون دیتابیس خودت انجام میده (تقریباً مثل LIKE و FULLTEXT).
فرقش اینه که Scout برات کارا رو تمیزتر و منظم‌تر می‌کنه:
خودش می‌فهمه کِی داده جدید اضافه شده، ایندکس‌ها رو آپدیت می‌کنه،
و یه متد ساده‌ی search() بهت میده که لازم نیست دستی کوئری‌های پیچیده بنویسی.
ولی از نظر دقت و قدرت، اون‌قدرها با Fulltext فرق نداره. (تا همینجا پیشنهاد من Scout + درایور database هست)

اما وقتی درایورش رو بذاری روی یه موتور واقعی مثل Meilisearch یا Algolia، اون موقع یه سطح دیگه‌ست.
اینا واقعاً برای جستجو ساخته شدن، با قابلیت‌هایی مثل typo tolerance (یعنی اگه کلمه رو اشتباه تایپ کنن هم پیدا می‌کنه)،
رَنگینگ دقیق‌تر، فیلتر پیشرفته، پیشنهاد خودکار و سرعت خیلی بالاتر.
از بینشون Meilisearch بهترین گزینه‌ست چون اوپن سورسه، تحریم نداره، می‌تونی خودت راحت روی سرورت نصبش کنی و بدون نیاز به اینترنت رانش کنی.
نصبش هم آسونه، یه فایل باینری داره که ران می‌کنی و بعد با یه پورت میاد بالا،
کافیه توی env. آدرسش رو بدی به Scout و تموم — دیگه درخواست‌ها به اون موتور فرستاده می‌شن. فقط چنتا کانفیگِ ساده.

در مورد Algolia هم، از نظر فنی میشه با یه سرور واسطه تحریمشو دور زد (مثل کاری که برای ارسال پیام از وب به تلگرام میشه انجام داد؛)، اما گمونم این موتور پولی باشه.

خلاصه اگر بخوام جمع‌بندی کنم:

برای پروژه‌های سبک یا سرورهای معمولی: FULLTEXT کفایت می‌کنه.

اگه خواستی ساختار مرتب‌تر و آماده‌تر داشته باشی ولی همچنان روی دیتابیس بمونی: Scout با درایور database.

اگه جستجو برات مهمه و می‌خوای حرفه‌ای، سریع و مدرن کار کنه → Scout با Meilisearch.

در نهایت، Scout یه جور چارچوب نظم‌دهنده‌ست، و موتورهایی مثل Meilisearch قلب واقعی جستجو.
می‌تونی حتی اول با Fulltext شروع کنی، بعد اگه پروژه بزرگ‌تر شد، راحت مهاجرت بدی به Meilisearch.

البته نمیدونم پروژه‌ی شما چه موجودیت‌هایی داره که اینقدر سیستم سرچ متنیِ گسترده مهمه. اگه فقط نیاز دارید سرچ بین چنتا عنوان اتفاق بیافته، همون روش قدیمی و ساده، خیلی بهتره.
من به این خاطر این همه توضیح دادم چون شما اسم از موتورهای جستجوی پیشرفته ای آوردید که مخصوص سرچ توی متن ساخته شدن. به درد وبلاگ و درکل سایت‌هایی بر پایه‌ی محتوا میخورن نه بر پایه‌ی محصول. ولی من چون استراکچر اپ شما رو نمیدونم، به روش خودتون پاسخ دادم. اما اگگه بحث فقط سرچ روی اسم محصولاست، اصلا از LIKE فراتر نرید.
به جاش یه سیستم سرچ پیشرفته کنارش بزارید که بر اساس تگ‌ها، اتربیوت‌های محصول مثل رنگ و سایز و .. سرچ اتفاق بیافته.
توی شاپ تا اسکیلِ‌متوسط رو به بالا، اصلا نیازی به موتورهای قدرتمندِ سرچ متنی نیست. با یه کوئری ساده میشه محصولات رو فیلتر کرد.
امیدوارم کمک‌کننده بوده باشه.
حالا اگه جاییش باز به مشکل خوردی در خدمت هستم. موفق باشی.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام