netwons

نمایش کلمات مشابه در جستجو لاراول بدون الستیک

netwons ۱۳۹۸/۰۸/۱۱ مباحث عمومی برنامه‌نویسی

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

 $similarto=DetailsModel::Where('name_links_downloads', 'like', "%{$str3}%")->take(20)->get();
پاسخ‌ها به این تاپیک
بهمن جعفرزاده
بهمن جعفرزاده
۱۳۹۸/۰۸/۱۲

اکه میخواهی متن مشابه جستجو بشه باید ازFull-text search استفاده کنی.

اگه تمایلی به استفاده از الستیک نداری میتونی از کتابخونه TNTsearch استفاده کنی.

https://github.com/teamtnt/laravel-scout-tntsearch-driver/issues/214

داکیومنت خوبی هم داره

netwons
netwons
۱۳۹۸/۰۸/۱۳

با الستیک بخوام انجام بدم اما آموزش مناسبی در لاراول نداره میشه راهنمایی کنید

من الان نمیدونم کدوم پکیج رو نصب کنم و چطوری اطلاعات رو از mysqlبه الستیک انتقال بدم و چطوری ازش استفاده کنم اگه شما بلدید یک توضیح بدید اینم ایدی تلگراممه

@Netwons

در پاسخ به

بهمن جعفرزاده
بهمن جعفرزاده
۱۳۹۸/۰۸/۱۳

من خودم از tntsearch استفاده میکنم.اگه داکیومنت خودش رو نگاه کنید متوجه میشید ولی باز من اینجا یه توضیحاتی میدم.

اگه composer رو نصب کردید دستور composer require teamtnt/laravel-scout-tntsearch-driver را داخل console وارد کنید.بعد از نصب پکیج کد زیر رو داخل فایل config/app.php وارد کنید

// config/app.php
'providers' => [
 // ...

 Laravel\Scout\ScoutServiceProvider::class,
 TeamTNT\Scout\TNTSearchScoutServiceProvider::class,
],

توجد کنید 'providers' وجود داره فقط این دو خط کد رو بهش اضافه کنید.

بعد کد زیر رو داخل فایل env. اضافه کنید

SCOUT_QUEUE = true
SCOUT_DRIVER=tntsearch
TNTSEARCH_FUZZINESS=auto

بعد دستور زیر رو داخل console وارد کنید

php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"

سپس کد زیر روبه آخر فایل config/scout.php اضافه کنید

'tntsearch' => [
 'storage' => storage_path(),
 'fuzziness' => env('TNTSEARCH_FUZZINESS', false),
 'fuzzy' => [
 'prefix_length' => 2,
 'max_expansions' => 50,
 'distance' => 2
 ],
 'asYouType' => false,
 'searchBoolean' => env('TNTSEARCH_BOOLEAN', false),
 ],

];

سپس برای مثال ما مدلی داریم به اسم post که به صورت زیر تعریف شده

 use Laravel\Scout\Searchable;

class Post extends Model
{
 use Notifiable, Searchable;
 protected $table = 'post';
 protected $primaryKey = 'postId';
 public $timestamps = false;
 protected $fillable = ['title', 'description'];
}

توجه کندی که خط اول رو باید به مدلتون اضافه کنید.بعد این که چند مقدار به جدول post اضافه کردید کد زیر رو داخل console وارد کنید

php artisan scout:import App\\Post

App\\Post همون مدل مد نظر هستش. بعد میتونیم به صورت زیر استفاده کنیم.

$result = Post::search("keyword")

کد بالا تو تمام ستون های جدول post جستجو انجام میده اگه میخواهید که در یک ستون خاص عمل جستجو انجام بشه از دستور زیر داخل مدل post استفاده کنید.

 use Laravel\Scout\Searchable;

class Post extends Model
{
 use Notifiable, Searchable;
 protected $table = 'post';
 protected $primaryKey = 'postId';
 public $timestamps = false;
 protected $fillable = ['title', 'description'];


 public function toSearchableArray()
 {
 $array = [
 'title' => $this->title,
 'description' => $this->description

 ];

 return $array;
 }
}


در این صورت جستجو فقط روی title و description انجام میشود.

فقط توجه کنید بعد از هرتغییر داخل دیتابیس به صورت دستی ، باید دستور php artisan scout:import App\\Post را داخل console وارد کنید که دیتا های مدل post سینک بشه

در پاسخ به

netwons
netwons
۱۳۹۸/۰۸/۱۳

کتابخونه TNTsearch تو سرعت هم تاثیر داره مثل الستیک هست

در پاسخ به

بهمن جعفرزاده
بهمن جعفرزاده
۱۳۹۸/۰۸/۱۳

Tntsearch هم مثل elastic از indexig کردن داده های استفاده میکنه تفاوتی من احساس نکردم.

در پاسخ به

netwons
netwons
۱۳۹۸/۰۸/۱۳

الستیک کار کردید

در پاسخ به