0

在我的项目中:

  • 一个帖子有很多标签。
  • 根据标签组合,帖子被放置在适当的类别中。例如,仅带有#politics 标签的帖子将转到“General Politics”部分,带有标签#politics 和#global 的帖子将转到“Global Politics”部分
  • 表“类别”存储类别和那些将接受的标签组合。
  • 这些标签不是帖子包含的唯一标签。

我的问题是:存储和索引标签的最佳(和经济)方法是什么,以便系统也可以轻松获取标签组合。目前,我将标签作为数组存储在“posts”表中的“tags”列中。

该项目基于 RoR 3.2 和 sqlite3。

4

2 回答 2

1

使用acts_as_taggable_ongem,您可以使用多个标签轻松查询对象:

matching_categories = @post.find_related_tags_for(Category)

结果列表按匹配数量递减排序,可能第一个是您要分配给帖子的匹配。

于 2012-10-20T08:09:47.303 回答
0

完成此操作的最简单且可能最快的方法是searchkickPosts模型上使用,然后在搜索数据中包含一个帖子被标记的标签列表。

  1. 下载并安装弹性搜索。您需要安装 jdk 才能正常工作。
  2. 安装seackick gem。
  3. 将此添加到您的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 属性的模型

  4. 要对标签组合执行查询,只需执行以下操作:

    Post.search("tag1,tag2",fields:[:tags])
    

    These queries are pretty fast, and one may confidently incorporate this logic for purpose of building a navigation structure.

Also see: Searckick Facets

于 2014-02-03T10:23:11.287 回答