@mhyeganeh
سلام و عرض ادب
میخوام توی جدول products ستون body را که از نوع text هست متنشونو به 2 صورت باهم مقایسه کنم
حالت اول : توی لیست محصولاتم اگر متن محصولم دقیقا با یک محصول دیگه یکی بود بهم نام محصول مرتبط را نشون بده
حالت دوم : اگر متن محصولاتم از لحاظ پاراگرافی تشابه داشتن هم حالا به هر طریقی بهم بگه که مثلا محصول A با محصول F مثلا 70درصد مشابهت دارن . یا بگه مثلا 3 پاراگرافشون یکیه
چطور باید این موردو راه اندازی کنم توی لاراول ؟ با whereRaw باید بزنم ؟
سلام
برای مورد اول یعنی پیدا کردن محصولاتی با متن توضیحات کاملا مشابه هم، یکی از ساده ترین کارهایی که میتونید بکنید این هست که یک command برای این کار ایجاد کنید. داخلش تمامی محصولات رو بگیرید و با یک حلقه foreach به ازای هر محصول، چک کنید آیا در جدول محصولات، رکورد دیگری غیر از همون مورد وجود داره که متن توضیحاتش برابر با اون مقدار باشه یا نه... مثلا اینجوری:
foreach(Product::all() as $product) {
if ($same_body = Product::where('id', '<>', $product->id)->where('body', '=', $product->body)->first(['id'])) {
$this->error("Product id={$product->id} has body equal to product id={$same_body->id}");
}
}
برای موضوع دوم هم اگر میخواهید تناظر مو به مو تو پاراگراف رو چک کنید باید متن رو مثلا با explode به تفکیک پاراگراف جداسازی کنید و بعد چیزی مثل فرایند بالا رو به ازای المنت های دو آرایه انجام بدید.
اگر هم میخواهید تناظرهای حدودی و نه دقیق رو بررسی کنید من اطلاع دقیقی ندارم و فقط میدونم میره سمت مباحثی مثل Fuzzy Search یا Approximate string matching و Full-text search که خودش عالمیه.
برای مثالی که بالا فرستادم هم پیش فرضم این بود که فرایندی یک مرتبه ای هست و قرار نیست به کرات ازش استفاده بشه. به همین خاطر خیلی از نظر Performance شاید بهینه نباشه و راهکارهای بهینه تری هم وجود داشته باشه و این صرفا یک مثال هست.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟