Как ограничить текстовый поиск определенным подмножеством базы данных?

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

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

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

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


person Nikhil Garg    schedule 01.06.2010    source источник


Ответы (2)


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

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
person Hadi    schedule 01.06.2010
comment
Вы рассматриваете проблему только в реляционной области. Чтобы было понятнее: я хочу применить полнотекстовый поиск в подзоне центрального индекса базы данных. Я не хочу клонировать данные в таблицу каждого пользователя и индексировать их отдельно, в дополнение к индексации основной базы данных. - person Nikhil Garg; 01.06.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}
person pupeno    schedule 01.06.2010
comment
1) Ааа... выбран немного неудачный пример. Мой плохой. Модель потребует отношения многие ко многим. Таким образом, каждый автомобиль должен фактически содержать несколько производителей. Так что это решение не сработает. 2) Я не уверен, что мы ограничили поиск даже здесь. Мы по-прежнему используем всю таблицу, и ограничение просто передается как условие sql. Можем ли мы как-то просто ограничить сам домен поиска? - person Nikhil Garg; 01.06.2010