Facettes (plusieurs valeurs pour un type de facettes) : format des données à indexer

Bonjour

Je souhaite monter une recherche full-text avec filtre par facettes

ce sont des recettes de cuisine, et je souhaite pouvoir filtrer mes recherches sur des facettes qui ont plusieurs valeurs possibles lors de l'indexation

par exemple, j'ai des recettes qui sont "sans-gluten" ET "végétarienne"

je peux préciser cette facette "santé" de plusieurs manieres quand j'indexe un document

a) un array de couple "clé" -> "valeur"

    "Facets" : [

         { 'santé': 'végétarien' },
         { 'santé': 'sans gluten' },
         { 'santé': 'sans lactose' },
         { 'public: 'familial' },
         { 'public: 'enfants' },
         { 'public: 'ados' },
         { 'public: 'amis' },
         { 'public: 'jeunes' },
         { 'public: 'étudiants' },
         { 'public: 'potes' },
 ]

b) un array de couples "clé -> 'array de valeurs possibles'

"Facets" : [

 'santé': ['végétarien', 'sans gluten', 'sans lactose' }] ,
 'public': ['familial','enfants','ados','amis','jeunes,'étudiants','potes']

]

c) un tableau où le "type" de facette est une valeur ... (je le sens pas trop celui là)

   "Facets" : [

         { type: 'santé', value: 'végétarien' },
         { type: 'santé', value:  'sans gluten' },
         { type: 'santé', value:  'sans lactose' },
         { type:  'public', value:  'familial' },
         { type: 'public', value:  'enfants' },
         { type: 'public', value:  'ados' },
         { type: 'public', value:  'amis' },
         { type: 'public', value:  'jeunes' },
         { type: 'public', value:  'étudiants' },
         { type:  'public', value:  'potes' },
 ]

je peux naviguer dans les recettes en choisissant les recettes qui sont "végétarien" et "sans gluten"
(j'ai testé avec le cas "a", nickel, ca marche avec 2 clauses "query bool must match")

et voila ce que je voudrais faire :

si je filtre la liste des recettes dont santé = "sans gluten", je veux pouvoir, en aggrégation,

  • récupérer le nombre des recettes qui seraient "sans gluten" et qui seraient "végétarien"

  • récupérer le nombre des recettes qui seraient "sans gluten" et qui seraient "sans lactose"

Y'a t il un format à privilégier lors de l'indexation de mes recettes dans elastic ?

merci par avance de vos conseils expérimentés

J'ai pu y arriver avec l'option a)

avec le mapping

          "recipeFacets.santé": { type: "keyword" }

et avec le search

{
  "aggs": {
    "allsanté": {
      "terms": {
        "field": "recipeFacets.santé"
      }
    }
  }
}

Excellent !

Petite question à propos de:

"recipeFacets.santé": { type: "keyword" }

A quoi ressemble un document type?

{
  "recipeFacets.santé": "végétarien"
}

ou

{
  "recipeFacets": {
    "santé": "végétarien"
  }
}

ni l'un, ni l'autre :slight_smile:

j'ai fait un truc du genre

recipeFacets: [
"santé": "végétarien",
"santé": "sans gluten",
"santé": "sans lactose" ... etc...
"occasion": "soirée covid",
"occasion": "boum",
"occasion": "anniversaire"... etc...
]

et j'ai du faire un mapping à "keyword" sur
recipeFacets.santé
et
recipeFacets.occasion

donc, ca marche (très) bien avec les aggs :slight_smile:

Ce format là ne fonctionne pas. Je suppose que c'est:

{
  "recipeFacets": [
    { "santé": "végétarien" },
    { "santé": "sans gluten" }
  ]
}

Exact ?

oui, c'est ca, pardon :frowning:

@dadoonet : si j'avais eu Elastic en 2005, lors de la création de la marketplace de RueDuCommerce, ca aurait carrément changé la donne ...
Nous nous sommes cassés les dents sur ce genre de sujets avec mysql ... et autres

1 Like

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.