2017-10-16 2 views
0

Hier ist meine Abfrage. Ich versuche, alle Produkte zu erhalten, die sich in der Kategorie "men_fashion" und "men_shoes" befinden (Kategorien werden als Begriffe/Tags verwendet). Dann möchte ich die gesamte Ergebnismenge abfragen und nach Produkten suchen, die "Männerstiefel gelb" haben.Elasticsearch-Aggregation wird nicht auf Filter angewendet

Die folgende Abfrage funktioniert einwandfrei, aber jetzt bekomme ich nicht die richtigen Aggregationsergebnisse. Es gibt mir alle Marken, wo ich mich nur für die Marken interessiere.

{ 
    "size": 15, 
    "from": 0, 
    "query": { 
     "query_string": { 
      "query": "men boots yellow" 
     } 
    }, 
    "filter": { 
     "bool": { 
      "must": [{ 
       "match": { 
        "active": 1 
       } 
      }, { 
       "match": { 
        "category": "men_fashion" 
       } 
      }, { 
       "match": { 
        "category": "men_shoes" 
       } 
      }] 
     } 
    }, 
    "aggs": { 
     "brands": { 
      "terms": { 
       "size": 100, 
       "field": "brand" 
      } 
     } 
    } 
} 

Ich denke, das an die Filter zurückzuführen sein könnte ich angewandt haben, aber wenn dies irgendwie i ok kompliziert ist mit einer einfachen Abfrage verwenden, die dies ohne Filter erreichen würden.

Antwort

1

Sie eine post filter anstelle eines normalen Abfragefilter verwenden, versuchen wie diese statt:

{ 
    "size": 15, 
    "from": 0, 
    "query": { 
    "bool": { 
     "must": { 
     "query_string": { 
      "query": "men boots yellow" 
     } 
     }, 
     "filter": [ 
     { 
      "match": { 
      "active": 1 
      } 
     }, 
     { 
      "match": { 
      "category": "men_fashion" 
      } 
     }, 
     { 
      "match": { 
      "category": "men_shoes" 
      } 
     } 
     ] 
    } 
    }, 
    "aggs": { 
    "brands": { 
     "terms": { 
     "size": 100, 
     "field": "brand" 
     } 
    } 
    } 
} 
+0

Ich denke, u die Abfrage-Parameter verpasst. Aber das ist perfekt. Danke Val. Ich habe noch eine weitere Frage zu elasticsearch, die mich seit einem Monat nervt. Sie können meine Frage hier herausfinden https://stackoverflow.com/questions/46463938/how-to-get-all-aggregations-by-avoiding-1-filter-from-the-elasticsearch-query. Im Grunde geht es um multi Auswahl Aggregationen. wenn ich auf irgendeinen Filter klicke, zB Farbe: golden. Es entfernt alle anderen Aggregationen und zeigt mir nur diese goldene Farbe. Aber Websites wie Amazon haben mehrere Farben zur Auswahl. Gibt es etwas einfacher als gefilterte Aggregation –

+0

Woopsie, meine schlechte, feste, danke! – Val

+0

Nach einigen Tests habe ich festgestellt, dass etwas mit der Abfrage nicht stimmt. Ich bin nicht in der Lage, die meisten Sätze zu suchen. Wie kann ich das ändern, so dass alles, was ein bisschen relevant ist, gezeigt werden sollte –

Verwandte Themen