طرح مسئله:
در دیتابیس های مثل mysql شما برای جستجوی در یک متن طولانی از like و % استفاده میکردید، مثال:
select * from users where bio like %web developer%;
عیب این نوع سرچ کردن، سرعت و پرفرمنس بسیار پایین در کوئری شما ست، بخاطر اینکه موتور دیتابیس شما سعی میکنه همه متن شما رو optimize کنه و نهایتا در اون جستجو کنه
راه حل در لاراول ۹:
استفاده از full index text و در الکوئنت where full text
− قدم اول در مایگریشن
$table->text('body')->fulltext();
با این کار موتور دیتابیس mysql میاد و متن رو تبدیل به کلمات میکنه و تک تک اونها رو ایندکس گذاری میکنه و نه تمام متن رو بصورت یکجا
− قدم بعدی نحوه کوئری زدن در لاراول
$users = DB::table('users') ->whereFullText('bio', 'web developer') ->get();
این روش پرفرمنس و سرعت به مراتب بالاتری نسبت به روش قبلی داره
جاست لایک دت و یا به همین راحتی (:
پ ن: لازم به ذکره که بدونید این کوئری معادل MATCH () ... AGAINST
در mysql هست.
حمید روحانی