我的项目:
- 帖子有许多标签。
- 基于标签组合,将帖子放置在适当的类别中。例如,只有#Politics标签的帖子应转到"一般政治"部分,并具有标签#Politics和#global的帖子将转到"全球政治"部分
- 表"类别"存储了类别和标签的组合,这些标签将接受。
- 这些标签不是帖子包含的唯一标签。
我的问题是:是存储和索引标签的最佳(和经济)方法是什么,以便系统也可以轻松拾取标签组合。目前,我将标签存储在"帖子"表中的"标签"列中。
该项目基于ROR 3.2和SQLITE3。
使用acts_as_taggable_on
GEM,您可以轻松地查询使用多个标签的对象:
matching_categories = @post.find_related_tags_for(Category)
结果列表是通过减少匹配数量来排序的,第一个可能是您要分配给帖子的列表。
最简单,可能是最快的方法是通过在 posts> posts> posts 模型上使用 searchkick
,然后在其中包含一个标签列表搜索数据。
- 下载并安装Elasticsearch。您需要安装JDK才能正常工作。
- 安装Searckick Gem。
-
将其添加到您的
post
模型:class Post<<ActiveRecord::Base attr_accessible :title , :body has_many :tags searchkick def search_data attributes.merge(tags: self.tags.map(&:name)) end
假设您将另一种
tag
模型与:name属性 -
要对标签组合进行查询,只需:
Post.search("tag1,tag2",fields:[:tags])
这些查询非常快,可以自信地合并此逻辑以构建导航结构。
另请参阅:Searckick Facets