0

J'ai une grande base de données centrale d'environ 1 million d'enregistrements lourds. Dans mon application, pour chaque utilisateur j'aurais un sous-ensemble de lignes de la table centrale, ce qui serait très petit (probablement 100 enregistrements chacun) .Lorsqu'un utilisateur particulier s'est connecté, je voudrais rechercher sur cet ensemble de données seulement. Exemple:Comment restreindre la recherche de texte à un certain sous-ensemble de la base de données?

Dites que j'ai une base de données centrale de toutes les voitures dans le monde. J'ai un profil d'utilisateur pour General Motors (GM), Ferrari etc. Quand GM est connecté, je veux juste chercher (une recherche en texte intégral et ne pas lancer une requête sql) pour les voitures qui sont fabriquées par GM. GM peut aussi lancer/retirer un modèle auquel cas la base de données centrale serait mise à jour & et serait donc un ensemble de lignes associé à GM. En cas d'acquisitions, la db de certains profils peut changer sans lancement/suppression de nouvelle voiture. Donc, le db central ne changera pas, mais les lignes peuvent le devenir.

Quelle est la meilleure façon de mettre en œuvre une telle conception? Ces ensembles de lignes plus petits devraient être dynamiques en fonction des activités de l'utilisateur.

Nous sommes sur Rails 2.3.5 et utilisons think_sphinx comme connecteur et Sphinx/MySQL pour les associations de recherche et relationnelles.

Répondre

0

comment sur l'utilisation has_many: par

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 
+0

Vous recherchez un problème dans un domaine relationnel uniquement. Pour me rendre plus clair: Je souhaite appliquer une recherche de texte complet sur la sous-zone de l'index central db. Je ne veux pas cloner les données dans la table de chaque utilisateur et l'indexer séparément, en plus de l'indexation de la base de données principale. –

0

Peut-être que vous voulez définir votre index avec quelque chose comme ceci:

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

puis utilisez field conditions, comme:

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

ou attribute filters:

Car.search "red", :with => {:manufacturer_id => gm.id} 
+0

1) AAh ... un peu mauvais exemple choisi.Mon mauvais. Le modèle aurait besoin de plusieurs à plusieurs relations. Donc, chaque voiture devrait effectivement contenir plusieurs fabricants. Donc, cette solution ne fonctionnera pas. 2) Je ne suis pas sûr que nous ayons restreint la recherche même ici. Nous utilisons encore toute la table et la restriction est juste passée en condition sql. Peut-on limiter le domaine de recherche lui-même? –