2014-07-09 43 views
5

Ich bin neu in ElasticSearch, also brauche ich etwas Hilfe damit.Facetten für verschachtelten Baum mit ElasticSearch

Ich habe eine Abfrage nach products zu suchen, die zu vielen categories gehören kann. Categories sind in einem verschachtelten Baum kombiniert.

Beispieldaten:

categories: [ 
    { 
    id: 1, 
    name: 'First category', 
    categories:[ 
     { 
     id: 12, 
     name: 'First subcategory' 
     }, 
     { 
     id: 13, 
     name: 'Second subcategory' 
     } 
    ] 
    }, 
    { 
    id: 2, 
    name: 'Second category' 
    } 
], 
products: [ 
    { 
    id: 1, 
    name: 'First product', 
    categories_ids: [2, 12] 
    }, 
    { 
    id: 2, 
    name: 'Second product', 
    categories_ids: [1] 
    } 
] 

Neben den Suchergebnissen ich den categories Baum einschließlich der Anzahl der Suchergebnisse in jedem category (ohne Kategorien ohne Suchergebnisse) erhalten müssen.

Für das obige Beispiel sollte es sein:

  • Erste Kategorie (2)
    • Erste Untergruppe (1)
  • Zweite Kategorie (1)

Can jemand erklärt, wie man dies mit ElasticSearch-Aggregationen macht?

Danke.

+0

Wie viele Kategorien haben Sie? – Val

Antwort

0

Ich glaube, Sie auf der Suche nach etwas, um diese:

{ 
    "aggs": { 
    "category_agg": { 
     "terms": { 
     "field": "category_name" 
     }, 
     "aggs": { 
     "sub_category_agg": { 
      "terms": { 
      "field": "sub_category" 
      }, 
      "filter": { 
      "term": { 
       "sub_category": "First subcategory" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

Filter anwenden (oder weglassen) als auf Bedarf und sicher sein, die Felder, auf denen Sie Aggregationen machen (category_name und subcategory_name in diesem Beispiel) not_analyzed.