Maison >développement back-end >Golang >Écriture d'une agrégation moyenne ES simple dans Golang

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

WBOY
WBOYavant
2024-02-09 14:33:08524parcourir

用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

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)

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),
        }
    }

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer