ElasticSearch groupe de plusieurs champs d'

La seule chose proche que j'ai trouvé est: Plusieurs groupe dans Elasticsearch

Fondamentalement, je vais essayer d'obtenir les ES l'équivalent de la suite de requête mysql:

select gender, age_range, count(distinct profile_id) as count FROM TABLE group by age_range, gender

L'âge et le sexe, par eux-mêmes, étaient faciles à obtenir:

{
  "query": {
    "match_all": {}
  },
  "facets": {
    "ages": {
      "terms": {
        "field": "age_range",
        "size": 20
      }
    },
    "gender_by_age": {
      "terms": {
        "fields": [
          "age_range",
          "gender"
        ]
      }
    }
  },
  "size": 0
}

qui donne:

{
  "ages": {
    "_type": "terms",
    "missing": 0,
    "total": 193961,
    "other": 0,
    "terms": [
      {
        "term": 0,
        "count": 162643
      },
      {
        "term": 3,
        "count": 10683
      },
      {
        "term": 4,
        "count": 8931
      },
      {
        "term": 5,
        "count": 4690
      },
      {
        "term": 6,
        "count": 3647
      },
      {
        "term": 2,
        "count": 3247
      },
      {
        "term": 1,
        "count": 120
      }
    ]
  },
  "total_gender": {
    "_type": "terms",
    "missing": 0,
    "total": 193961,
    "other": 0,
    "terms": [
      {
        "term": 1,
        "count": 94799
      },
      {
        "term": 2,
        "count": 62645
      },
      {
        "term": 0,
        "count": 36517
      }
    ]
  }
}

Mais maintenant j'ai besoin de quelque chose qui ressemble à ceci:

[breakdown_gender] => Array
    (
        [1] => Array
            (
                [0] => 264
                [1] => 1
                [2] => 6
                [3] => 67
                [4] => 72
                [5] => 40
                [6] => 23
            )

        [2] => Array
            (
                [0] => 153
                [2] => 2
                [3] => 21
                [4] => 35
                [5] => 22
                [6] => 11
            )

    )

Veuillez noter que 0,1,2,3,4,5,6 sont des "mappings" pour les tranches d'âge afin qu'ils signifient réellement quelque chose 🙂 et pas seulement des chiffres. par exemple le Genre[1] (qui est "mâle") se décompose en une tranche d'âge [0] (qui est "de moins de 18 ans") avec un nombre de 246.

  • Je suis comme quand je l'appel à l'aide de curl 3{ "error" : { "root_cause" : [ { "type" : "parsing_exception", "raison" : "la clé Inconnue pour un START_OBJECT dans [facettes].", la "ligne" : 6, "col" : 13 } ], "type" : "parsing_exception", "raison" : "la clé Inconnue pour un START_OBJECT dans [facettes].", la "ligne" : 6, "col" : 13 }, "statut" : 400 }
InformationsquelleAutor Pavel | 2013-08-26