Nouvelles Chroniques d'Amethyste

Penser au Sens, pas au Verbe

Endeca: Faire dépendre une dimension de la valeur d’une autre dimension

Poster un commentaire

Le problème que nous allons essayer de résoudre est le suivant:

Je dispose d’un jeu de facettes dynamiques. C’est à dire des facettes qui sont ajoutées dynamiquement au pipeline. Ces facettes permettent alors de flaguer une liste de produits pour créer des promotions, des boutiques…

On est toujours dans le contexte exposé dans l’article précédent:

https://amethyste16.wordpress.com/2014/01/31/endeca-les-pipeline-dont-une-dimension-est-declinee-dans-un-grand-nombre-de-variant/

Créer ces facettes ne présente aucune difficulté si ce n’est que le client souhaite avoir des facettes spécifiques à certaines boutiques et pas à d’autres. Bien sûr les boutiques vendent toutes les même produits.

La première idée est de créer un Mdex par boutique et tout se gère de façon standard. Sauf qu’avec près de 400 boutiques ce n’est pas commode. Alors on va garder un pipeline unique et un Mdex commun à toutes les boutiques.

Nous allons développer et tester plusieurs méthodes. Pourquoi plusieurs?
C’est toujours intéressant de disposer d’un panel de solution pour certains problèmes. Même si elles résolvent le même problème, elles ne sont pas pour autant équivalentes et parfois l’une peut s’avérer plus intéressante que l’autre. C’est une histoire de contexte. C’est pour cela que je n’en préconise aucune plutôt qu’une autre.

Le synonyme furtif

Nous avons créé un outil Web qui permet de créer nos facettes dans le pipeline et de marquer des produits. Dans le cadre du POC j’ai fais des tests sur une facette unique déjà existante, la situation est la suivante:

a11-02-2014 15-01-17

Le nom a été choisit par le développeur…
Nos facettes ne servent qu’à marquer des produits, elles ont donc besoin que d’une seule valeur et celle-ci n’a pas de signification particulière, vous vous en doutez vu le nommage!

Il est possible d’associer un synonyme à chaque valeur de dimension (mais pas à la dimension elle-même).

13-02-2014 10-20-57

On en a d’ailleurs toujours au moins un, celui marqué Display et affiché entre parenthèses qui correspond à l’affichage de la valeur.

Le point qui nous intéresse est que je peux marquer un synonyme comme cherchable. J’ai donc ajouté un code qui correspond au centre pour lequel la facette est disponible, ici le centre 414, mais on pourrait en ajouter d’autre.

Pour filtrer les facettes accessibles uniquement au centre 414, on n’a qu’à ajouter le paramètre:

D=S.414

A chaque requête Endeca.

Note: On pourrait également compléter avec le paramètre Di qui attend les id Endeca des dimensions sur lesquelles faire la recherche.

Dans la prochaine version de l’application nous allons gérer les dimensions dynamiques dans une facette unique, ce qui rendra Di utilisable d’un point de vue pratique.

Après indexation retournons nous vers l’application de référence:

13-02-2014 10-20-57

Trois produits sont marqués.

Filtrons. Au premier abord rien n’a changé et j’ai mis un moment avant de découvrir ceci:

13-02-2014 10-33-57

Qui nous amène au résultat recherché:

13-02-2014 10-35-21

Si vous avez d’autres dimensions qui dépendent du centre, rien ne vous empêche d’ajouter le même marquer comme synonyme.

Ca fonctionne, le principal bémol est que je ne suis pas parvenu à le voir fonctionner avec Assembler. Je ne sais pas comment faire.

La propriété derrière la nuque

Outre des synonymes, on peut décorer une valeur de dimension de propriétés:

13-02-2014 10-39-23

J’ai donc définit une propriété appelée filtre.centre qui prend une liste de valeurs (ici 414) correspondant aux codes du centre pour lesquels la dimension est active. On peut convenir qu’en l’absence de propriété, elle est valide pour tous les centres.

Les propriétés de raffinement ne sont à ma connaissance ni filtrables, ni cherchables contrairement aux synonymes ou aux propriétés de records.

Si Endeca ne peut pas faire le travail, alors il faudra le faire au niveau de l’application. Celle-ci va donc recevoir toutes les valeurs de facette, mais on doit implémenter une logique qui ne l’affiche que si sa propriété contient le code du centre en cours.

Côté Assembler ça marche sans problèmes:

13-02-2014 10-45-11

Règles de précédence

Il est possible de lier l’apparition d’une dimension à la sélection préalable d’un raffinement dans une autre dimension. Ce mécanisme ressemble beaucoup à ce dont on a besoin!

Comment le mettre en œuvre?

  • Dans Développer Studio on sélectionne le menu Precedence Rules
  • Cliquer sur le bouton New
    La fenêtre suivante s’affiche:

13-02-2014 12-37-42

On sélectionne la source, c’est à dire la valeur de dimension à choisir en premier. Dans notre cas ce sera Site Web qui est une des valeurs de la dimension CENTRE.

La cible est la dimension qui dépend de CENTRE. On sélectionne la facette.

Rule type est plus subtil. Le choix dépend de la nature de CENTRE (la source):

  • Si la source est une dimension hiérarchique, on souhaite en général attendre d’avoir parcouru la hiérarchie en entier, jusqu’en bas, pour activer la cible. Dans ce cas on choisit leaf.
  • Si la source n’est pas une dimension hiérarchique, on choisira Standard.

Comme toujours on indexe, puis on teste.

  • On remarque que cette fois TESTKEV_2 n’est plus affiché lorsque l’on est sur la home (N=0). C’est normal, on n’a pas encore sélectionné de centre.
  • Si je sélectionne un centre quelconque, je ne vois pas TESTKEV_2 apparaître.
  • Si je sélectionne Site Web, alors ma facette apparait.

Cela fonctionne donc bien.

Note: quand vous montez un POC, vérifiez que vos données soient cohérentes. Par exemple dans l’exemple précédent ma facette ne marquait QUE des produits qui n’étaient eux même pas proposé par le centre Site Web servant de test. Evidemment ça ne marche pas!

Une même valeur de dimension peut être impliquée dans plusieurs règles de précédence. Par exemple dans l’article cité en introduction de celui-ci on a envisagé le cas où l’on avait autant de dimensions prix que de centre. On pourrait alors ajouter en plus:

13-02-2014 12-46-20

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s