0

J'ai vu quelques exemples de recherche facettisée dans Elastic mais tous savent à l'avance sur quels champs vous voulez créer des godets.Recherche facettisée en boutique avec Elastic

Comment dois-je travailler quand j'ai une boutique en ligne avec plusieurs catégories, où les propriétés des valeurs sont différentes dans chaque catégorie?

Existe-t-il un moyen de décrire les propriétés de vos documents lors de l'exécution d'une requête (par exemple, un filtre par catégorie)?

J'ai cette requête en ce moment:

{ 
    "from" : 0, "size" : 10, 
    "query": { 
     "bool" : { 
      "must" : [ 
       { "terms": {"color": ["red", "green", "purple"]} }, 
       { "terms": {"make": ["honda", "toyota", "bmw"]} } 
      ] 
     } 
    }, 
    "aggregations": { 
    "all_cars": { 
     "global": {}, 
     "aggs": { 
       "colors": { 
       "filter" : { "terms": {"make": ["honda", "toyota", "bmw"]} }, 
       "aggregations": { 
        "filtered_colors": { "terms": {"field": "color.keyword"} } 
       } 
       }, 
       "makes": { 
       "filter" : { "terms": {"color": ["red", "green"]} }, 
       "aggregations": { 
        "filtered_makes": { "terms": {"field": "make.keyword"} } 
       } 
       } 
      } 
     } 
    } 
} 

Comment puis-je savoir sur quels domaines je peux faire agrégations. Existe-t-il un moyen de décrire les propriétés d'un document après l'exécution d'une requête? Je peux donc savoir ce que sont les champs possibles, à agréger.

Répondre

0

Vous pouvez utiliser l'agrégation de filtres qui va filtrer, puis créer une agrégation de termes à l'intérieur?

+0

Cela renverrait toutes les valeurs d'une propriété au lieu de toutes les propriétés – brechtvhb

+0

que je vois. J'ai mal compris l'affaire. Peut être être vous pouvez utiliser https://www.elastic.co/guide/en/elasticsearch/reference/5.6/mapping-field-names-field.html? Je veux dire faire plusieurs demandes. Un pour obtenir les champs, l'autre pour calculer les aggs ... Difficile probablement. – dadoonet

1

En ce moment, je stocke toutes les propriétés de mon article dans un tableau et je peux rapidement les regrouper comme ceci:

{ 
    "size": 0, 
    "aggregations": { 
    "array_aggregation": { 
     "terms": { 
     "field": "properties.keyword", 
     "size": 10 
     } 
    } 
    } 
} 

C'est un pas dans la bonne direction, mais cette façon, je ne sais pas ce que le type d'une propriété est.

est ici un objet exemple

  "price": 10000, 
      "color": "red", 
      "make": "honda", 
      "sold": "2014-10-28", 
      "properties": [ 
       "price", 
       "color", 
       "make", 
       "sold" 
      ]