Maison > développement back-end > Golang > le corps du texte

Écriture d'une agrégation moyenne ES simple dans Golang

WBOY
Libérer: 2024-02-09 14:33:08
avant
474 Les gens l'ont consulté

用golang编写简单的ES avg聚合

L'éditeur PHP Xiaoxin vous a présenté aujourd'hui un article sur l'utilisation de Golang pour écrire une simple agrégation moyenne ES. ES (Elasticsearch) est un moteur de recherche et d'analyse distribué open source qui fournit de riches fonctions d'agrégation, y compris l'agrégation avg (moyenne). Cet article expliquera comment utiliser Golang pour écrire un programme d'agrégation ES avg simple afin d'aider tout le monde à mieux comprendre et appliquer la fonction d'agrégation d'ES. Découvrons-le ensemble !

Contenu de la question

J'ai essayé d'écrire une simple agrégation es avg en go, mais même si cela semble ne pas savoir comment analyser le résultat :

ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout)
     defer cancel()
     query := elastic.NewAvgAggregation().Field("Assignment.HomeworkSize")
     ss := elastic.NewSearchSource().Query(query)
     searchResult, err := c.ES.Search().Index(StudentIndex).SearchSource(ss).Do(ctx)
     if err != nil {
         return 0, err
     }
     // Parse Results
     aggs := searchResult.Aggregations
Copier après la connexion

Mais je ne sais pas comment analyser searchresult pour obtenir le résultat de cette agrégation. Fondamentalement, je souhaite analyser un grand nombre de documents représentant les étudiants et obtenir la taille moyenne des devoirs.

Solution de contournement

J'utilise habituellement http pour accéder à Elastic. Je renvoie donc les résultats sous forme de carte et vous pouvez utiliser le débogueur pour vérifier quels sont vos résultats et travailler à partir de là.

var resp map[string]interface{}
err := c.handlerequest(http.methodget, tag, req, &resp)
Copier après la connexion

où tag est votre index, req - votre demande d'exécution élastique, et réponse est la réponse

Le gestionnaire interne ressemble à ceci :

req, err := http.newrequest(method, c.endpoint+tag, bytes.newreader(jsonbody))

où jsonbody est la requête que vous transmettez au gestionnaire Tout le reste est la manière habituelle d'envoyer http avec go

Une autre chose à retenir est de gérer les types (assertions de type) dans la carte de résultats, comme ceci :

for index, hit := range resp["hits"].(map[string]interface{})["hits"].([]interface{}) {

        Source := hit.(map[string]interface{})["_source"].(map[string]interface{})

        items[index] = someType{
            SomeField: Source["app_name"].(string),
        }
    }
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!