3 votes

Une façon efficace de calculer les *comptes de facettes* dans Elastic Search

Je veux calculer le nombre de facettes pour une interface utilisateur de requête à facettes mais je pense qu'il me manque quelque chose car je ne parviens pas à obtenir les chiffres dont j'ai besoin en utilisant les filtres de facettes.

Voici un exemple. Soit deux facettes avec trois termes possibles dans chaque facette :

Colors: {red, yellow, blue}
Notes: {do, re, mi}

Lorsque j'effectue une recherche, le décompte de chaque terme dans une facette ne tient pas compte des filtres définis dans l'autre facette.

Pour illustrer :

[ ] All colors (18)
 [x] Red (10)
 [ ] Green (5)
 [ ] Blue (3)

[ ] All notes (18)
 [ ] Do (5)
 [x] Re (7)
 [ ] Mi (6)

Notez que les totaux de chaque facette correspondent au nombre total de résultats pour la requête, comme si aucun filtre n'avait été défini.

Le comportement que je souhaite est que les chiffres de la facette Notes prennent en compte le filtre de la facette Colors et vice versa. En d'autres termes, la somme des nombres pour les termes de la note doit être de 10 (pour correspondre au filtre rouge), et non de 18.

Il est intéressant de noter que l'exemple de capture d'écran dans la documentation utilise un exemple de Linked In qui démontre effectivement le comportement que je souhaite.

http://www.elasticsearch.org/guide/reference/api/search/facets/

Je suis capable d'obtenir le résultat que je veux en soumettant à nouveau manuellement la requête une fois pour chaque terme dans chaque facette (ugh) mais je me demande s'il y a un moyen d'obtenir le même comportement que LinkedIn en modifiant ma requête.

8voto

romanb Points 2602

Le seul moyen que j'ai trouvé pour que cela fonctionne est d'utiliser la logique suivante pour toute facette multi-sélection :

Chaque fois que l'utilisateur sélectionne une valeur dans une facette ("drill down"), vous ajoutez un filtre correspondant à toutes les facettes (via facet_filter). sauf la facette dans laquelle la sélection a été effectuée, ainsi qu'à la facette de niveau supérieur filtre pour filtrer les résultats de la requête.

En d'autres termes, étant donné 3 facettes multi-sélectionnées, A, B & C :

  • Sélectionner une valeur de A => Ajouter un filtre au niveau supérieur filtre ainsi qu'à la filtre à facettes de la facette B et C.
  • Sélectionner une valeur de B => Ajouter un filtre au niveau supérieur filtre ainsi qu'à la filtre à facettes de A & C.
  • ... et ainsi de suite

Le filtre de niveau supérieur combine toujours les filtres de toutes les sélections, tandis que chaque facette individuelle contient des facettes_filtres en fonction de la sélection dans le champ autre facettes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X