我目前正在开发一个网站,允许用户在线阅读/编写/保存/编辑/ ...文本(所以calles帖子)。好吧,一切正常,但现在我真的需要一些帮助。
例如,YouTube提供了一系列视频,这些视频对我来说也很有趣。这个建议也基于我正在观看的视频。如果我观看有关“驾驶法拉利”的视频,下一个建议可能是“驾驶兰博基尼”......现在我也希望在我的网站上实现类似的功能。它真的不需要那么准确,我只是在寻找一种简单有效的方法来实现“这对你来说也很有趣” - 区域。我完全不知道如何开始,并会感谢每一个想法!
答案 0 :(得分:0)
好吧这是一个非常基本和简单的方法..假设用户正在观看的项目现在在其数据库中有一个标题。所以标题是"驾驶兰博基尼" ..我取标题,使用
将其分解为数组$titlearray = explode(' ',"Driving a Lamborghini");
现在我有一个数组,可以用来为类似物做一个简单的搜索选择查询:
$select = "SELECT * From TABLE_NAME WHERE ";
foreach($titlearray as $key=>$title){
$titlearray[$key]="LIKE '%".$title."%'";
}
$select .="(" . implode(' OR ',$titlearray) .")";
现在您可以使用简单的选择查询来获得与该标题的相似性。你也可以下订单和限制。
答案 1 :(得分:0)
我建议您查看PredictionIO服务器。但是,如果你只需要mysql / php解决方案,有几种方法:
使用MySQL' fulltext search。查询看起来像:
SELECT id, body, MATCH (title, body) AGAINST
($title IN NATURAL LANGUAGE MODE) AS score
FROM articles WHERE MATCH (title, body) AGAINST
($title IN NATURAL LANGUAGE MODE);
然而,mysql的全文搜索很糟糕。最好查看Sphinx,Lucene,Solr或ElasticSearch
使用简单的LIKE将标题与其他帖子匹配:
$title = "Video about my awesome cat - Michael";
$parts = preg_split("/[\s,\-]+/", $title);
$query = "SELECT * FROM `posts` WHERE ";
$where = [];
$binds = [];
foreach ($parts as $part) {
$where[] = "(title like ?)";
$binds[] = "%" . $part . "%";
}