博客系统通过文章标签计算相关文章

# 通过文章标签计算相关文章的方式

在我们写博客系统的时候,如果我们没有引入其他的框架,直接自己写代码,能不能找到比较相似的文章推荐给用户呢?

我们来试试吧!

# 提交参数

  • 当前文章ID,用于获取当前文章的标签进行匹配
  • 推荐数量,返回的条数,后面要做限额处理,比如说5~50.

# 计算方式

第一种:

  1. 获取文章标签
  2. 如果标签只有一个,则获取一个。如果标签不指一个,随即获取一个
  3. 根据标签去查询其他文章,并且文章ID不为当前文章的ID
  4. 如果数量不够,获取最新的进行补充

第二种:

  1. 获取文章标签
  2. 如果标签只有一个,则获取一个。如果标签不指一个,则获取第一个。
  3. 根据标签获取文章,如果不够,标签只有一个的话,获取最新的文章;标签不指一个,则获取下一个标签,再不够再获取最新的文章即可

# 实现

博客系统目前的实现方式是第一种

代码:


    /**
     * 获取推荐文章,通过标签来计算
     *
     * @param articleId
     * @param size
     * @return
     */
    @Override
    public ResponseResult listRecommendArticle(String articleId, int size) {
        //查询文章,不需要文章,只需要标签
        String labels = articleDao.listArticleLabelsById(articleId);
        //打散标签
        List<String> labelList = new ArrayList<>();
        if (!labels.contains("-")) {
            labelList.add(labels);
        } else {
            labelList.addAll(Arrays.asList(labels.split("-")));
        }
        //从列表中随即获取一标签,查询与此标签相似的文章
        String targetLabel = labelList.get(random.nextInt(labelList.size()));
        log.info("targetLabel == > " + targetLabel);
        List<ArticleNoContent> likeResultList = articleNoContentDao.listArticleByLikeLabel("%" + targetLabel + "%", articleId, size);
        //判断它的长度
        if (likeResultList.size() < size) {
            //说明不够数量,获取最新的文章作为补充
            int dxSize = size - likeResultList.size();
            List<ArticleNoContent> dxList = articleNoContentDao.listLastedArticleBySize(articleId, dxSize);
            //这个写法有一定的弊端,会把可能前面找到的也加进来,概率比较小,如果文章比较多
            likeResultList.addAll(dxList);
        }
        return ResponseResult.SUCCESS("获取推荐文章成功.").setData(likeResultList);
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 结果

图片描述

上次更新: 2022/03/28, 23:04:38