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

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

 $similarto=DetailsModel::Where('name_links_downloads', 'like', "%{$str3}%")->take(20)->get();
پاسخ ها

sokanacademy forum
کاربر سکان آکادمی 4 سال پیش

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

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

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

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

sokanacademy forum
کاربر سکان آکادمی 4 سال پیش

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

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

@Netwons

sokanacademy forum
کاربر سکان آکادمی 4 سال پیش

من خودم از 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 سینک بشه

sokanacademy forum
کاربر سکان آکادمی 4 سال پیش

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

sokanacademy forum
کاربر سکان آکادمی 4 سال پیش

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

sokanacademy forum
کاربر سکان آکادمی 4 سال پیش

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

online-support-icon