复杂的搜索设计

时间:2011-04-10 14:36:45

标签: mysql ruby-on-rails-3 search search-engine

我正在使用mysql在rails3上实现配方搜索。

搜索的想法是用户输入任意数量的成分并搜索输出建议,以产品缺陷顺序排序。

class Recipe < ActiveRecord::Base
  has_many :ingredients
end

# these records will be entered by user
class IngredientType < ActiveRecord::Base
  has_many :ingredients
end

# this table is join table
class Ingredient < ActiveRecord::Base
  belongs_to :ingredient_type
  belongs_to :recipe
end

实施此搜索的最有效方法是什么? 你会推荐什么宝石或技术? 谢谢你的回答

1 个答案:

答案 0 :(得分:1)

  def self.from_ingredients ingredients
    count_sql = Ingredient.
        select('COUNT(*)').
        joins(:recipes_ingredients).
        where('`recipes_ingredients`.`recipe_id` = `recipes`.`id`').
        where('`ingredients`.`id` in (?)', ingredients).to_sql

    where("(#{count_sql}) > 0").
        order("((`recipes`.`ingredients_count`) - (#{count_sql})) ASC")
  end

我设法通过在食谱模型中创建这样的方法来找到解决方案。