0

Ich habe ein paar Beispiele über facettierte Suche in Elastic gesehen, aber alle wissen im Voraus, welche Felder Sie Buckets erstellen möchten.Facettierte Suche im Webshop mit Elastic

Wie soll ich arbeiten, wenn ich einen Webshop mit mehreren Kategorien habe, in denen die Eigenschaften der Werte in jeder Kategorie unterschiedlich sind?

Gibt es eine Möglichkeit zu beschreiben, welche Eigenschaften Ihre Dokumente beim Ausführen einer Abfrage haben (z. B. nach Kategorie filtern)?

Ich habe diese Anfrage jetzt:

{ 
    "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"} } 
       } 
       } 
      } 
     } 
    } 
} 

Wie kann ich wissen, auf welchen Feldern wir Aggregationen machen. Gibt es eine Möglichkeit, die Eigenschaften eines Dokuments nach dem Ausführen einer Abfrage zu beschreiben? So kann ich wissen, wo die möglichen Felder liegen, auf denen aggregiert werden soll.

Antwort

0

Sie können die Filter-Aggregation verwenden, die filtern und dann eine Aggregation von Begriffen innerhalb erstellen?

+0

, dass alle Werte einer Eigenschaft, also nicht alle Eigenschaften – brechtvhb

+0

Ich sehe zurückkehren würde. Ich habe den Fall falsch verstanden. Kann sein, dass Sie https://www.elastic.co/guide/en/elasticsearch/reference/5.6/mapping-field-names-field.html verwenden können? Ich meine, mehrere Anfragen zu machen. Eins um die Felder zu bekommen, das andere um die Aggs zu berechnen ... Schwer wahrscheinlich. – dadoonet

1

Im Moment bin ich zu speichern alle Eigenschaften meines Artikels in einem Array und ich kann sie schnell wie folgt zusammenfassen:

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

Dies ist ein Schritt in die richtige Richtung, aber auf diese Weise ich weiß nicht, was der Typ einer Eigenschaft ist.

Hier ist ein Musterobjekt

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