MySQL / PHP:自动建议与此类似的条目

时间:2015-12-19 08:50:09

标签: php mysql

我目前正在开发一个网站,允许用户在线阅读/编写/保存/编辑/ ...文本(所以calles帖子)。好吧,一切正常,但现在我真的需要一些帮助。

例如,YouTube提供了一系列视频,这些视频对我来说也很有趣。这个建议也基于我正在观看的视频。如果我观看有关“驾驶法拉利”的视频,下一个建议可能是“驾驶兰博基尼”......现在我也希望在我的网站上实现类似的功能。它真的不需要那么准确,我只是在寻找一种简单有效的方法来实现“这对你来说也很有趣” - 区域。

我完全不知道如何开始,并会感谢每一个想法!

2 个答案:

答案 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的全文搜索很糟糕。最好查看SphinxLuceneSolrElasticSearch

  • 使用简单的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 . "%";
    }