相关文章推荐阅读(标签)

Posted Eternity味道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了相关文章推荐阅读(标签)相关的知识,希望对你有一定的参考价值。

  最近在写文章的管理, 发现网上关于 "相关文章推荐" 的资料比较少, 于是自己写了一个, 初稿, 代码未经优化, 实现搜索相同(相似)标签的文章,   比如搜索 "深入" 也是可以搜到"深入浅出"的.

  如果是多个标签, 本文会(遍历标签)每次只对一个标签进行搜索, 达到两条数据即返回. 

  如有更好的搜索方法, 欢迎共同讨论

 相关文章  标签相关, 剔除本身的id

  本人比较随意,  写的文章比较丑, 大家别太在意

    /**
     *
     * @param 标签 $label
     * @param 文章ID $article_id
     * @return 文章相关字段
     */
    public function getRelated($label,$article_id)
    {
        //传入的标签数量
        $num = count($label);
        //多个标签 开始
        if($num>1)
        {
            $Article = array();
            for($i=0;$i<$num;$i++)
            {
                $arr = Article::find()
                ->select([‘article_id‘,‘title‘,‘summary‘,‘create_time‘])
                ->where([‘status‘=>1])
                ->andwhere([‘<>‘,‘article_id‘,$article_id])
                ->andwhere([
                ‘or‘,
                [‘like‘,‘label‘,$label[$i]],
                ])
                ->asArray(true)
                ->orderBy(‘create_time desc‘)
                ->limit(2)
                ->all();
                $Article = array_merge($Article,$arr);
                $num1 = count($Article);
                if($num1 > 1)
                {
                    return $Article;
                }
            }
            //如果查到的文章不足两篇, 就随便去一篇最新的补上,
            if(count($Article)<2)
            {
                $Article2 = Article::find()
                ->select([‘article_id‘,‘title‘,‘summary‘,‘create_time‘])
                ->where([‘status‘=>1])
                ->andwhere([‘<>‘,‘article_id‘,$article_id])
                ->asArray(true)
                ->orderBy(‘create_time desc‘)
                ->limit(2)
                ->all();
                $Article = array_merge($Article,$Article2);
                $Article = array_slice($Article,0,2);
                return $Article;
            }
            return $Article;
           
        }
        //多个标签  结束
        
        //如果只有一个标签, 从这里开始,到最后结束
        $Article1 = Article::find()
        ->select([‘article_id‘,‘title‘,‘summary‘,‘create_time‘])
        ->where([‘status‘=>1])
        ->andwhere([‘<>‘,‘article_id‘,$article_id])
        ->andwhere([
                ‘or‘,
                [‘like‘,‘label‘,$label],
                ])
        ->asArray(true)
        ->orderBy(‘create_time desc‘)
        ->limit(2)
        ->all();
        //如果查到的文章不足两篇, 就随便去一篇最新的补上,
        //这里重复了, 可以自己优化一下
        if(count($Article1)<2)
        {
            $Article2 = Article::find()
            ->select([‘article_id‘,‘title‘,‘summary‘,‘create_time‘])
            ->where([‘status‘=>1])
            ->andwhere([‘<>‘,‘article_id‘,$article_id])
            ->asArray(true)
            ->orderBy(‘create_time desc‘)
            ->limit(2)
            ->all();
            $Article = array_merge($Article1,$Article2);
            $Article = array_slice($Article,0,2);
            return $Article;
        }
        return $Article1;
    }

 

以上是关于相关文章推荐阅读(标签)的主要内容,如果未能解决你的问题,请参考以下文章

根据文章标签相似度获取推荐文章

Wagtail - 在页面上呈现带有相关片段和标签的数据时遇到问题

推荐相关文章的可靠算法都有哪些?

Python代码阅读(第19篇):合并多个字典

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

推荐学java——MyBatis高级