gpt4 book ai didi

sql - 如何查找带有多个标签的帖子

转载 作者:行者123 更新时间:2023-11-29 13:37:16 25 4
gpt4 key购买 nike

我在 Rails 上有一个非常简单的带有 postgresql 的标签模型:

class Tag < ActiveRecord::Base
has_many :taggings
has_many :posts, :through => :taggings,
:source => :tagged, :source_type => 'Post'
end

class Tagging < ActiveRecord::Base
belongs_to :tag
belongs_to :tagged, :polymorphic => true
end

class Post < ActiveRecord::Base
has_many :taggings, :as => :tagged
has_many :tags, :through => :taggings
end

有没有一种简单的方法可以找到所有有 2 个以上指定标签的帖子?例如,假设有“风格”、“男士”、“女士”、“促销”等标签。我想创建一个接受标签数组的通用查找语句。因此,如果输入是 ["style"] 那么它应该返回所有带有该标签的帖子(简单)或者如果输入是 ["style", "men"] 那么它应该返回所有带有标签 "style"AND "的帖子男人”。

最佳答案

Is there an easy way to find all posts that have 2 more specified tags? For example lets say there are tags of "style", "men", "women", "sale"

经典的方法是使用数据透视表:posts <-> posts_tags <-> tags

不过,您可以像这样对标签进行编码,因为这是最简单的方法(保持完整性、外键、让您轻松扫描标签列表等)。

这种方式对于少量帖子和少量标签具有不错的性能,但查询起来很麻烦(您需要一些聚合、INTERSECT 或每个标签 1 个 JOIN)并且如果标签不是,则速度极慢非常有选择性。

显然,对于您想执行的那种搜索,这很糟糕。所以你有两个选择:

1- 在你的帖子表中的 INTEGER[] 列中具体化帖子的标签 ID 列表,在其上放置一个要点(或 gin)索引,并使用“包含整数数组”运算符,该运算符被索引,速度极快,而且查询起来很简单。

2- 只需将您的标签作为文本并在其上添加全文索引

两者都非常快,并且对整数数组有优势。

关于sql - 如何查找带有多个标签的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6797999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com