Trouver des valeurs distinctes, pas des comptes distincts dans elasticsearch

Elasticsearch documentation suggère* que leur morceau de code

*documentation fixe

GET /cars/transactions/_search?search_type=count
{
  "aggs": {
    "distinct_colors": {
      "cardinality": {
        "field": "color"
      }
    }
  }
}

Correspond à la requête sql

SELECT DISTINCT(color) FROM cars

Mais il correspond en fait à

SELECT COUNT(DISTINCT(color)) FROM cars

Je ne veux pas savoir combien de valeurs distinctes j'ai mais quelles sont les valeurs distinctes. Quelqu'un sait comment y parvenir?

23
demandé sur jasiustasiu 2015-01-28 13:21:49

3 réponses

Utilisez une agrégation de termes dans le champ color. Et vous devez faire attention à la façon dont ce champ sur lequel vous voulez obtenir des valeurs distinctes est analysé, ce qui signifie que vous devez vous assurer de ne pas le tokeniser lors de l'indexation, sinon chaque entrée de l'agrégation sera un terme différent qui fait partie du contenu du champ.

Si vous voulez toujours la tokenisation et utiliser l'agrégation terms, vous voudrez peut-être regarder le type d'indexation not_analyzed pour ce champ, et peut-être utiliser multi les champs.

Agrégation des termes pour les voitures:

GET /cars/transactions/_search?search_type=count
{
  "aggs": {
    "distinct_colors": {
      "terms": {
        "field": "color",
        "size": 1000
      }
    }
  }
}
24
répondu Andrei Stefan 2016-11-22 14:22:12

Pour mettre à jour L'excellente réponse D'Andrei Stefan, nous devons dire que le paramètre de requête search_type=count n'est plus supporté dans Elasticsearch 5. La nouvelle façon de le faire est d'ajouter "size" : 0 dans le corps tel que:

GET /cars/transactions/_search
{
  "size": 0,
  "aggs": {
    "distinct_colors": {
      "terms": {
        "field": "color",
        "size": 1000
      }
    }
  }
}
21
répondu Ortomala Lokni 2016-11-29 13:44:52

Personnellement, les deux réponses étaient Arcanes pour moi et désespérément complexes quand je voulais ajouter plusieurs filtres.

Pour moi, ce qui avait du sens était d'aller sur L'onglet Découvrir et d'appliquer les filtres que je voulais. J'ai ensuite enregistré ma recherche.

Ensuite, j'ai créé une nouvelle visualisation de graphique à barres en utilisant ma recherche enregistrée. J'ai ensuite modifié l'axe des X pour utiliser l'agrégation des termes en fonction de mon champ d'intérêt (dans mon cas, les noms D'utilisateur), puis l'ordre Par Nombre. Assurez-vous que la taille est quelque chose de grand, comme 500.

Vous devriez pouvoir obtenir les résultats sous forme de tableau sous votre graphique. Programmation JSON Simple et sans complexe. Juste une série de clics. Vous pouvez même enregistrer la visualisation pour plus tard.

0
répondu Phlucious 2018-10-04 23:13:44