Rails思考Sphinx索引自我加入关联树结构

时间:2012-08-07 18:25:19

标签: ruby-on-rails tree indexing associations thinking-sphinx

我有属于某一类别的产品。而且类别组成了一棵树 父母和子女使用自我联接的结构:

社团:

class Category < ActiveRecord::Base
  has_many :children, class_name: "Category", foreign_key: "parent_id"
  belongs_to :parent, class_name: "Category"
end

class Product < ActiveRecord::Base
  belongs_to :category
end

例如,

Fruits & Vegetables     =>    "High" Category 
Fresh Fruits            =>    "Intermediate" Category
Citrus                  =>    "Low" Category
Limes Large             =>    Product

我想使用Thinking Sphinx来索引“低”类别名称和 产品的“高”类别名称,甚至可能是树层次结构中的所有类别名称。

我可以按如下方式索引低类别父类名称:

class Product < ActiveRecord::Base
  indexes :name
  indexes category.parent.name, as: :low_category
end

注意:“高”和“低”类别之间的节点数是可变的。我需要一种动态添加层次名称的方法。

但是如何在树中进一步索引类别名称呢?我知道我不能使用方法 在TS索引中,我该如何设置数据库?

最重要的是,如何索引“高”类别名称?

1 个答案:

答案 0 :(得分:1)

你能这样做吗?

class Product < ActiveRecord::Base
  indexes :name

  category = category.parent
  indexes category.name, as: :low_category

  while category.parent do
    if category.parent
      indexes category.name, as: :root_category
    elsif category.parent
      indexes category.name, as: :high_category
    else
      indexes category.name
    end

    category = category.parent
  end
end