Как ограничить текстовый поиск определенным подмножеством базы данных? - PullRequest
0 голосов
/ 01 июня 2010

У меня есть большая центральная база данных около 1 миллиона тяжелых записей. В моем приложении для каждого пользователя у меня было бы подмножество строк из центральной таблицы, которое было бы очень маленьким (вероятно, 100 записей в каждой). Когда конкретный пользователь вошел в систему, я хотел бы искать только по этому набору данных. Пример:

Скажем, у меня есть центральная база данных всех автомобилей в мире. У меня есть профиль пользователя для General Motors (GM), Ferrari и т. Д. Когда GM вошел в систему, я просто хочу искать (полнотекстовый поиск, а не запрос sql) для тех автомобилей, которые производятся GM. Также GM может запустить / отозвать модель, и в этом случае центральная база данных будет обновлена, и поэтому набор строк будет связан с GM. В случае приобретения, база данных определенных профилей может измениться без запуска / удаления нового автомобиля. Таким образом, центральная база данных не изменится, но наборы строк могут.

Какой лучший способ реализовать такой дизайн? Эти меньшие наборы строк должны быть динамическими в зависимости от действий пользователя.

Мы находимся на Rails 2.3.5 и используем think_sphinx в качестве коннектора и Sphinx / MySQL для поиска и реляционных ассоциаций.

Ответы [ 2 ]

0 голосов
/ 01 июня 2010

Может быть, вы хотите определить свой индекс примерно так:

class Car
  define_index do
    indexes description
    has 'cars.manufacturer_id', :as => :manufacturer_id, :type => :integer
  end
end

, а затем используйте условия поля , например:

Car.search "red", :conditions => {:manufacturer_id => gm.id}

или атрибутные фильтры :

Car.search "red", :with => {:manufacturer_id => gm.id}
0 голосов
/ 01 июня 2010

как насчет использования has_many: через

class Manufacturer
class Car
class ManufacturerCarRelation

Manufacturer
 has_many :manufacturer_car_relations
 has_many :cars through => manufacturer_car_relations

ManufacturerCarRelation
 belongs_to :manufacturer
 belongs_to :car
...