博客系统通过文章标签计算相关文章(推荐相关文章)
程序员拉大锯
发表于
2020-09-06 16:21
1992
博客系统
推荐
文章
博客
后台
通过文章标签计算相关文章的方式
在我们写博客系统的时候,如果我们没有引入其他的框架,直接自己写代码,能不能找到比较相似的文章推荐给用户呢?
我们来试试吧!
提交参数
- 当前文章ID,用于获取当前文章的标签进行匹配
- 推荐数量,返回的条数,后面要做限额处理,比如说5~50.
计算方式
第一种:
- 获取文章标签
- 如果标签只有一个,则获取一个。如果标签不指一个,随即获取一个
- 根据标签去查询其他文章,并且文章ID不为当前文章的ID
- 如果数量不够,获取最新的进行补充
第二种:
- 获取文章标签
- 如果标签只有一个,则获取一个。如果标签不指一个,则获取第一个。
- 根据标签获取文章,如果不够,标签只有一个的话,获取最新的文章;标签不指一个,则获取下一个标签,再不够再获取最新的文章即可
实现
博客系统目前的实现方式是第一种
代码:
/**
* 获取推荐文章,通过标签来计算
*
* @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);
}