сложный дизайн поиска

#mysql #ruby-on-rails-3 #search #search-engine

#mysql #ruby-on-rails-3 #Поиск #поисковая система

Вопрос:

Я внедряю поиск рецептов в rails3 с использованием mysql.

Идея поиска заключается в том, что пользователь вводит любое количество ингредиентов, а поиск выдает предложения, что приготовить, отсортированные в порядке дефицита продукта.

 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:

   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
  

Мне удалось найти решение, создав такой метод в модели рецепта.