Détection des Quantités : Qu’est-ce qu’une “quantité” ? Et pourquoi devons-nous la détecter ?
Une quantité, telle que définie par Martin Fowler dans son livre “Analysis Patterns”, est un couple qui combine une quantité et une unité (comme 30 litres, 0,25 cl, ou 140 cm). Dans les applications basées sur la recherche, il existe de nombreux cas où vous souhaitez classer votre jeu de données en utilisant des attributs dimensionnés, car ces quantités ont une signification particulière dans le contexte commercial sur lequel vous travaillez. Le premier exemple qui me vient à l’esprit ?
La bière est proposée dans plusieurs contenants (par exemple, canettes, bouteilles) ; chacun d’eux est disponible dans différentes tailles (par exemple, 25 cl, 50 cl, 75 cl ou 0,25 lt, 0,50 lt, 0,75 lt). Un bon catalogue enregistrerait cette information dans des champs dédiés, comme « contenant » (bouteille, canette) et « capacité » (25 cl, 50 cl, 75 cl dans l’exemple ci-dessus) : de cette manière, la logique de recherche peut les utiliser correctement. Le facettage (et le filtrage ultérieur) est un bon exemple de ce que l’utilisateur peut faire après avoir exécuté une première recherche : il peut filtrer et affiner les résultats, espérant ainsi trouver ce qu’il cherchait.
Mais si nous partons du début de l’interaction utilisateur, il n’y a pas de résultat du tout : juste le champ de texte vide où l’utilisateur va taper quelque chose. « Quelque chose » pourrait être n’importe quoi, tout ce qui, dans son esprit, est lié au produit qu’il veut trouver : une marque, un type de contenant, un nom de modèle ou une quantité. En quelques mots : tout ce qui représente une ou plusieurs caractéristiques pertinentes du produit qu’il recherche.
L’un des principaux défis, lors de l’implémentation d’une logique de recherche, est de comprendre le sens des termes saisis. Cela relève généralement d’un sujet très difficile, impliquant souvent des concepts complexes (par exemple, l’apprentissage automatique), mais parfois les choses sont plus simples, surtout lorsque les concepts que nous voulons détecter suivent un schéma commun et régulier, comme une quantité.
L’idée principale derrière le plugin de détection des quantités est la suivante : à partir de la requête saisie par l’utilisateur, il détecte d’abord les quantités (c’est-à-dire les montants et les unités correspondantes) ; ensuite, cette information sera isolée de la requête principale et utilisée pour améliorer la pertinence des produits liés à ces quantités. La pertinence ici peut être interprétée de différentes manières :
- Correspondance exacte : toutes les bouteilles avec une capacité de 25 cl.
- Correspondance par plage : toutes les bouteilles avec une capacité entre 50 cl et 75 cl.
- Correspondance exacte avec équivalence : toutes les bouteilles avec une capacité de 0,5 litre (1 lt = 100 cl).
- Correspondance par plage avec équivalence : toutes les bouteilles avec une capacité entre 0,5 et 1 litre (1 lt = 100 cl).
Voici une courte liste avec une brève description de toutes les fonctionnalités prises en charge :
- Variants : une unité peut avoir une forme préférée et (éventuellement) plusieurs variantes. Cela peut inclure différentes formes de la même unité (par exemple, mt, mètre) ou une unité équivalente dans un autre système métrique (par exemple, cl, once).
- Équivalences : il est possible de définir un tableau d’équivalences afin que les unités puissent être converties à l’exécution (« bière 0,25 lt » aura la même signification que « bière 25cl »). Un tableau d’équivalences associe une unité à un facteur de conversion.
- Boost : chaque unité peut avoir un boost dédié, ce qui est particulièrement utile pour pondérer plusieurs unités correspondantes.
- Plages : chaque unité peut avoir un écart configuré, ce qui déclenche une requête de plage où la quantité détectée peut être au milieu (PIVOT), au début (MIN) ou à la fin (MAX) de la plage générée.
- Champs multiples : dans le cas où plusieurs attributs utilisent la même unité (par exemple, hauteur, largeur, profondeur).
- Hypothèses : lorsqu’une « quantité orpheline » (c’est-à-dire une quantité sans unité) est détectée, il est possible de définir un tableau d’hypothèses et de laisser Solr deviner l’unité.
N’hésitez pas à essayer, et si vous pensez que cela pourrait être utile, partagez avec nous vos idées et/ou vos retours.