من میخوام یک کلمه مشابه هم داشت نمایش بده مثلا کلمه اصلی =ایران سرزمین من
کلمه مشابه=ایران من یا سرزمین من
باید هر دو رو پیدا کنه اما پیدا نمیکنه
$similarto=DetailsModel::Where('name_links_downloads', 'like', "%{$str3}%")->take(20)->get();
من میخوام یک کلمه مشابه هم داشت نمایش بده مثلا کلمه اصلی =ایران سرزمین من
کلمه مشابه=ایران من یا سرزمین من
باید هر دو رو پیدا کنه اما پیدا نمیکنه
$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
داکیومنت خوبی هم داره
با الستیک بخوام انجام بدم اما آموزش مناسبی در لاراول نداره میشه راهنمایی کنید
من الان نمیدونم کدوم پکیج رو نصب کنم و چطوری اطلاعات رو از 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 سینک بشه
کتابخونه TNTsearch تو سرعت هم تاثیر داره مثل الستیک هست
الستیک کار کردید
Tntsearch هم مثل elastic از indexig کردن داده های استفاده میکنه تفاوتی من احساس نکردم.
ما در سکانآکادمی معتقدیم همهی انسانها حق دارند، به آموزش باکیفیت و کمهزینه دسترسی آسان داشته باشند و همهی افراد میتوانند با آموزش درست، زندگی فردی و اجتماعی خود را بهتر کنند. با توجه به تخصص تیم ما در حوزهی IT و نیاز روزافزون بازار کار به متخصصان این حوزه، تولید و عرضهی محتوای مهارتمحور و تخصصی را در حوزهی IT جدیتر دنبال کردیم. در این راه از ابتدای انتخاب مسیر متناسب با توانایی و امکانات دانشجو تا یادگیری، تمرین، کسب مهارت تخصصی و عمومی، و در نهایت معرفی به بازار کار همراه او هستیم... بیشتر
پاسخ ها