0

私のプロジェクトでは:

  • 投稿には多くのタグがあります。
  • タグの組み合わせに基づいて、投稿は適切なカテゴリに配置されます。たとえば、#politics タグのみを含む投稿は「General Politics」セクションに移動し、タグ #politics および #global を含む投稿は「Global Politics」セクションに移動します。
  • テーブル「カテゴリ」には、カテゴリと、それらが受け入れるタグの組み合わせが格納されます。
  • 投稿に含まれるタグはこれらのタグだけではありません。

の質問は、システムがタグの組み合わせを簡単に取得できるように、タグを保存してインデックスを作成するための最良の (そして経済的な) 方法は何ですか? 現在、「posts」テーブルの「tags」列にタグを配列として保存しています。

プロジェクトは RoR 3.2 と sqlite3 に基づいています。

4

2 に答える 2

1

gemを使用するとacts_as_taggable_on、複数のタグを使用してオブジェクトを簡単に照会できます。

matching_categories = @post.find_related_tags_for(Category)

結果のリストは、一致する数が少ない順に並べ替えられます。おそらく最初のリストが、投稿に割り当てたいリストです。

于 2012-10-20T08:09:47.303 に答える
0

これを達成するための最も簡単でおそらく最速の方法は、 Postssearchkickモデルで を使用し、投稿がタグ付けされているタグのリストを検索データに含めることです。

  1. elasticsearchをダウンロードしてインストールします。動作させるには 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])
    

    これらのクエリは非常に高速であり、ナビゲーション構造を構築する目的でこのロジックを自信を持って組み込むことができます。

参照: Searckick ファセット

于 2014-02-03T10:23:11.287 に答える