通过文章标签计算相关文章的方式 在我们写博客系统的时候,如果我们没有引入其他的框架,直接自己写代码,能不能找到比较相似的文章推荐给用户呢? 我们来试试吧! 提交参数 当前文章ID,用于获取当前文章的标签进行匹配 推荐数量,返回的条数,后面要做限额处理,比如说5~50. 计算方式 第一种: 获取文章标签 如果标签只有一个,则获取一个。如果标签不指一个,随即获取一个 根据标签去查询其他文章,并且文章ID不为当前文章的ID 如果数量不够,获取最新的进行补充 第二种: 获取文章标签 如果标签只有一个,则获取一个。如果标签不指一个,则获取第一个。 根据标签获取文章,如果不够,标签只有一个的话,获取最新的文章;标签不指一个,则获取下一个标签,再不够再获取最新的文章即可 实现 博客系统目前的实现方式是第一种 代码:
/**
* 获取推荐文章,通过标签来计算
*
* @param articleId
* @param size
* @return
*/
@Override
public ResponseResult listRecommendArticle(String articleId, int size) {
//查询文章,不需要文章,只需要标签
String labels = articleDao.listArticleLabelsById(articleId);
//打散标签
List
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 likeResultList = articleNoContentDao.listArticleByLikeLabel("%" + targetLabel + "%", articleId, size);
//判断它的长度
if (likeResultList.size() < size) {
//说明不够数量,获取最新的文章作为补充
int dxSize = size - likeResultList.size();
List dxList = articleNoContentDao.listLastedArticleBySize(articleId, dxSize);
//这个写法有一定的弊端,会把可能前面找到的也加进来,概率比较小,如果文章比较多
likeResultList.addAll(dxList);
}
return ResponseResult.SUCCESS("获取推荐文章成功.").setData(likeResultList);
}
结果