|
Samuel Torton
|
Mercredi 27 Mai 2009 10:13:41 am
Recherche dans une liste d'items
Bonjour,
Je suis sur eZpublish v4.1.0.
Je développe un petit moteur de recherche d'une liste de biens immobiliers.
Dans ma page, j'ai deux zones:
. zone de criteres de recherche (type de bien, surface, prix loyer, etc...)
. zone d'affichage avec pagination.
Pour la sélection des type de biens, la fonction fetch_alias va tres bien, dans laquelle j'inclus ou exclus les classes correspondants aux type de biens recherchés... et la pagination se fait ensuite automatiquement.
Pour la sélection des critères (par exemple: tous les biens dont loyer est inférieur à 1000 euros, ou bien critères de sélection de la ville, etc...), je suis confronté à un gros problème:
. le fectch_alias avec pagination ne correspond pas, car il ne fetche que les biens dans un range correspondant à l'offset et le page_limit, et c'est ensuite qu'il affiche les resultats. Or, dans mon cas, je dois d'abord me taper le fetch de TOUS les biens et leurs attributs, pour aller vérifier que les attributs repondent à mes criteres, et ensuite calculer ma pagination.
Je ne sais pas si je me fais bien comprendre....
Dois-je tout développer moi-même, ou bien existe-t'il une methode, avec fetch, permettant de rentrer des critères de sélection dans des parametres de fetchalias.ini, par exemple... ce serait des parametres, si l'on fait l'analogie avec des requetes SQL, de type "WHERE mon_attribut_prix < 1000euros".
Merci pour vos indications, avant que je ne fonce tete baissée dans du developpement à reinventer l'eau chaude.
--
Samuel Torton
|
|
Jérôme Cohonner
|
Vendredi 29 Mai 2009 3:47:51 pm
Re: Recherche dans une liste d'items
Bonjour Samuel,
En effet, le système de fetch a une importante limitation :
Lorsque vous souhaitez filtrer sur un attribut, ce filtre ne peut pas mettre en commun plusieurs classes. Derrière le mécanisme, le filtre va faire une jointure sur l'id de l'attibut, hors cet id est différent entre chaque classe même si fonctionnellement pour votre site, l'attribut est identique.
-- La solution : eZ Find --
Faire un moteur de recherche multicritère avec eZ Publish de manière native atteind rapidement des limites comme celle évoquée ci-dessus.
C'est pourquoi les équipes d'eZ Systems ont développé la solution eZ Find. Cette dernière remplace le moteur de recherche natif d'eZ Publish par SOLR (solution de la fondation Apache, basée sur Lucene).
-- Pourquoi est-ce différent ? --
Cette solution est différente parce que les contenus sont indexés sur leur identifiant textuel et non sur leur id numérique. Vous pourrez donc faire un filtre transverse à plusieurs classes à la simple condition d'avoir utiliser le même identifiant pour l'attribut à filtrer.
-- Difficulté de mise en oeuvre d'eZ Find --
La solution eZFind est très simple à mettre en oeuvre mais nécessite 2 choses : java, la configuration du serveur pour lancer SOLR à chaque démarrage. Une documentation est intégrée à l'extension pour ces 2 points.
Il vous faudra ensuite gérer une requête spécifique puisqu'eZ Find est initialement prévu pour faire de la recherche full texte, mais les recherches précises sont tout à fait possible.
|