【问题标题】:Laravel: Get similar posts by percentage of presence of tags [closed]Laravel:按标签存在的百分比获取相似的帖子[关闭]
【发布时间】:2021-03-31 11:09:39
【问题描述】:

我有PostTag 型号。一个Post 可以有多个Tag,以后可以通过$post->tags 访问。现在,我想使用标签按标签存在百分比来获取类似的帖子。这是场景:

当前帖子标签:tag1, tag2, tag3, tag4, tag5

类似帖子 1:tag2, tag3, tag4, tag6, tag7 - 包含 3 个标签 (60%)

类似帖子 2:tag1, tag2, tag3, tag7 - 包含 3 个标签 (60%)

非相似帖子:tag1, tag22, tag33, tag44 - 仅包含 1 个标签 (20%)

假设我希望标签之间有 60%(来自当前帖子)的相似性,并且我想在 MySQL 级别上获取它们。我该怎么做?

【问题讨论】:

标签: php mysql laravel


【解决方案1】:

对于类似的帖子,使用帖子列表和当前帖子标签获取标签计数。应用 orderby 标签计数 desc 并限制您想要获得的类似帖子的数量。

像这样使用 withCount 函数

$current_tags=$post->tags->pluck('id');

$similar_posts=Post::withCount('tags')->join('tags','posts.id','=','tags.post_id')-`>whereIn('tag_id',$current_tags)->groupBy('posts.id')->orderBy('tags_count')-`>limit(5)->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    相关资源
    最近更新 更多