حمید روحانی
حمید روحانی
خواندن ۱ دقیقه·۳ سال پیش

ایندکس گذاری تکست در لاراول ۹ - larvel 9 full index text

طرح مسئله:

در دیتابیس های مثل 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 هست.


حمید روحانی

ایندکس
PHP Developer - Web Developer
شاید از این پست‌ها خوشتان بیاید