Я пытаюсь внедрить механизм рекомендаций для моего сайта в laravel.Я написал код для него, но код ЧРЕЗВЫЧАЙНО МЕДЛЕННЫЙ . Я запустил сценарий около 5 минут назад и до сих пор, он все еще загружается. Ни одна из моих таблиц БД даже не имеет до 20 строк.
Есть ли способ, которым я могу ускорить его, или я должен просто прекратить использовать laravel / php для механизма рекомендаций? Если да, то на каком языке и т. Д.
Вот мой код (важная часть)
public function showReccPosts(){
/*
$tsil =total similarity INdex for likers(those who liked a post)
*/
$db='laravellikecomment_likes';
$allposts= DB::table('posts')->pluck('id');
$allposts = $allposts->toArray();
$tn=count($allposts);
$ai=0;$user=Auth::id();
while ($allposts[$ai] <= $tn) {
$recclist=array();
$wl=DB::table($db)->where('item_id',$allposts[$ai])->where('vote', 1)->pluck('user_id');
$wd=DB::table($db)->where('item_id',$allposts[$ai])->where('vote', -1)->pluck('user_id');
$nl=count($wl);
$nd=count($wd);
$i=0;
$tsil=0;$tsid=0;
foreach ($wl as $key => $value) {
$tsil=si($key,$user);
}
foreach ($wd as $key => $value) {
$tsid=si($key,$user);
}
$possibility=$tsil+$tsid;
$possibility=$possibility*3;
$tagpossibility= 1;
$posibility=$possibility+$tagpossibility;
$posibility=$posibility/4;
//$recclist = array_combine($allposts, $recclist);
//arsort($reccclist);
}
function si($a,$b){
$a_like=DB::table($db)->pluck('user_id')->where('user_id',$a)->where('vote',1);
$a_like=$a_like->toArray();
$a_dislike=DB::table($db)->pluck('user_id')->where('user_id',$a)->where('vote',-1);
$a_dislike=$a_dislike->toArray();
$b_like=DB::table($db)->pluck('user_id')->where('user_id',$b)->where('vote',1);
$b_like=$a_like->toArray();
$b_dislike=DB::table($db)->pluck('user_id')->where('user_id',$b)->where('vote',-1);
$b_dislike=$a_dislike->toArray();
$c = 0;
foreach ($a_like as $i) {
if (in_array($i,$b_like)) $c++;
}
$sil= $c/count($a_like);
$d=0;
foreach ($a_dislike as $i) {
if (in_array($i,$b_dislike)) $d++;
}
$sid=$d/count($a_dislike);
$tsil=($sil+$sid)/2;
return $tsil;
}
return view('reccomended.index',compact('allposts','possibility'));
}