Développer avec RBS Change : [Recherche] Filtre sur un topic, récursif

  • 47301.1

    28/11/2011 12:16


    David Guillot
    Rang : Expert
    Bonjour,

    Je cherche à créer des filtres par site et par rubrique dans mon moteur de recherche. Dans la classe indexer_QueryHelper j'ai trouvé :
    - websiteIdRestrictionInstance : fonctionne bien pour filtrer par site
    - descendantOfInstance : ne fonctionne pas pour trier par rubrique... Quelles sont mes autres possibilités ?

    Merci d'avance
  • 47301.2 en réponse à 47301.1 écrit par David Guillot

    28/11/2011 15:01


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Pourriez-vous préciser sur quel type de document vous tentez d'implémenter cette recherche ?

    En gros cette restriction descendantOfInstance dans la recherche backoffice et les information sur lesquelles elle fait son test ne sont indexées que pour le backoffice (cf la méthode buildBackIndexedDocument sur indexer_IndexService).

    Cela dit, si votre recherche porte sur un modèle donné, rien n'empêche de rajouter cette information. Ça peut se faire dans le getIndexDocument sur la classe finale du document via la méthode setDocumentAncestors définie sur indexer_IndexedDocument en lui passant les identifiants qui vous arrangent.
  • 47301.3 en réponse à 47301.2 écrit par Gaël Port

    29/11/2011 14:02


    David Guillot
    Rang : Expert
    Cette recherche s'appliquerait à tous les documents du site. Nous souhaitons pouvoir restreindre la recherche à une rubrique, mais remonter n'importe quel document présent dans l'arborescence d'une rubrique.

    Vous me dites donc que descendantOf ne s'applique que pour les recherches en BO ; mais alors comment réaliser un tel filtre en front ?
  • 47301.4 en réponse à 47301.3 écrit par David Guillot

    29/11/2011 18:07


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Le gros problème en fait c'est que bon nombre de documents (principalement dans les modules récents comme download ou event par exemple) sont affichés en front liés à une rubrique mais afin d'être multi-implantables, ne sont pas pour autant dans l'arborescence d'une rubrique (quand au catalogue ou au forum, c'est plus compliqué encore puisqu'il y a des indirections entre la rubrique et le document).

    Donc il y a deux points à résoudre :
    1) trouver un point central où se greffer pour traiter globalement les document sans avoir à injecter getIndexDocument sur chacun
    2) trouver une solution pour prendre en compte un maximum de documents


    Concernant le premier point, en l'état ce n'est pas évident à mettre en place en l'état. Je viens d'ouvrir un ticket pour ajouter un point d'entrée : Impossible d'agir globalement pour ajouter des infos à l'indexation des documents

    Un fois qu'il sera résolu, il vous suffira de surcharger la méthode completeFrontIndexDocument qui sera appelée pour chaque document indexé.


    Concernant le second point, il est possible de s'en sortir en traitant les cas les plus courants :
    - si le document a des rubriques dans ses ancêtres, c'est bon
    - si le document a un champ "topic" contenant des document de type "modules_website/topic", c'est bon aussi
    - pour les autres (notamment les produits et les messages de forum) c'est à gérer au cas par cas...
  • 47301.5 en réponse à 47301.4 écrit par Gaël Port

    30/11/2011 10:02


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Voilà, j'ai traité le ticket mentionné plus haut et mis à jour le clone public du repository.
  • 47301.6

    06/01/2012 17:40


    David Guillot
    Rang : Expert
    Je déterre ce sujet car je me suis enfin attaqué à cette problématique. Donc :
    - Injection de l'IndexService : OK
    - Ajout, dans la surcharge de la méthode completeFrontIndexDocument, des identifiants des topics auxquels le document est rattaché (ainsi que leurs ancêtres) à un champ d'indexation complémentaire (avec setComplete2Field). Les valeurs multiples sont prises en charge automatiquement
    - Dans mon bloc de recherche, ajout d'un TermQuery sur ce nouveau champ

    Et tout marche parfaitement, merci !!
 
Merci de prendre connaissance et de respecter les règles des forums.
 
1360 membres
Aucun membre connecté