2009-05-22 8 views
0

J'ai une application rails dans laquelle j'essaie d'effectuer une recherche en texte intégral. Ferret semble être le choix le plus populaire. Cependant, j'ai un problème. J'ai une «chose» qui contient un identifiant qui détermine si un utilisateur peut le voir (et donc le chercher), mais je veux rechercher des sous-modèles de cette «chose» qui sont liés à ma «chose» mais ne contiennent directement aucune référence à l'utilisateur.Recherche de sous-modèles avec Ferret

Par conséquent, comment je l'implémente? Y a-t-il une façon intelligente de l'implémenter, ou dois-je salir mes modèles avec un lien vers l'identifiant du domaine?

+0

Les furets volent tout ce qui brille. Habituellement, ils ont un endroit dans la maison où ils cachent tout, alors vous pouvez regarder là-bas si vous les utilisez pour chercher. ;) – Malfist

Répondre

1

Je pense qu'il serait très erroné de supposer que Ferret est le choix le plus populaire pour cela. La plupart des gens que je connais ont abandonné Ferret et l'ont remplacé par Sphinx. Et les gens qui ne peuvent pas utiliser Sphinx pour une raison quelconque ont opté pour Xapian.

Cela dit, la réponse à votre question est susceptible d'être en grande partie le même quel que soit le système d'indexation que vous choisissez:

Lorsque vous traitez avec des autorisations et l'indexation, vous ne pouvez pas efficacement quoi que ce soit d'index lié à le système d'autorisations car il va être spécifique à l'utilisateur. Tous vos trucs d'autorisations doivent vivre dans vos modèles/contrôleurs quelque part. Je suis friand de mettre tous mes trucs d'autorisations dans un module et ensuite l'inclure dans mon modèle, de sorte que je puisse facilement le partager entre les modèles.

La pagination peut être très pénible pour ce genre de chose car vous demandez 10 articles à votre moteur de recherche, puis votre code d'autorisation rejette 5 de ces articles, ce qui signifie que vous devez continuer vos recherches jusqu'à vos 10 premiers éléments à afficher. Et maintenant, quand vous voulez la page deux, eh bien, les choses se transforment alors en un véritable gâchis. Dieu vous en préserve, ils décident de passer directement à la page dix, car maintenant vous ne pouvez pas faire des trucs comme donner un ID de début au lieu d'un numéro de page. Vraiment, ce n'est pas quelque chose que vous voulez faire si vous pouvez l'aider.

Il n'y a vraiment pas de moyens «intelligents» pour contourner la non-concordance entre les autorisations et l'indexation de texte intégral. Au moins, rien de ce que je connais. C'est juste une douleur. J'ai suggéré à mon patron quand nous avons commencé que la seule solution raisonnable était un système d'autorisations égalitaires: Si nous vous donnions un nom d'utilisateur et un mot de passe, alors vous avez accès. Il n'était pas un fan.