2016-09-30 6 views
0

ich Begriffe Aggregationen bin mit dem alle von jedem nicht von Benutzern Stadt Dies gibtElasticsearch - Begriffe Aggregation für bestimmte Felder erhalten

{ 
"aggs" : { 
"cities" : { 
    "terms" : { "field" : "city.name" } 
    } 
    } 
} 

Ergebnisse zu erhalten. Aber ich möchte immer bestimmte Städte in Aggregationsergebnissen sehen, unabhängig davon, ob sie in den Top 10 sind oder nicht. Muss ich die Filter-Aggregation für jede Stadt separat verwenden, um das Ergebnis zu erhalten?

+0

Sie könnten wahrscheinlich einfach eine benutzerdefinierte Sortierung mit groovigem/schmerzlosem Scripting erstellen, aber ich würde zwei separate Aggregationen erstellen und sie in Ihrer App zusammenführen. –

Antwort

0

Sie haben drei Lösungen:

A. Sie einen Filter in der Abfrage angeben:

{ 
    "query": { 
    "terms": { 
     "city.name": [ "city1", "city2", "city3" ] 
    } 
    }, 
    "aggs": { 
    "cities": { 
     "terms": { 
     "field": "city.name" 
     } 
    } 
    } 
} 

B. Sie einen Filter in den Aggregationen angeben:

{ 
    "aggs": { 
    "city_filter": { 
     "filter": { 
     "terms": { 
      "city.name": [ 
      "city1", 
      "city2", 
      "city3" 
      ] 
     } 
     }, 
     "aggs": { 
     "cities": { 
      "terms": { 
      "field": "city.name" 
      } 
     } 
     } 
    } 
    } 
} 

C Sie können filter values in den Begriffen Aggregation:

{ 
    "aggs": { 
    "cities": { 
     "terms": { 
     "field": "city.name", 
     "include": "city1*", 
     "exclude": "city2*" 
     } 
    } 
    } 
} 
Verwandte Themen