Maison > Article > développement back-end > Écriture d'une agrégation moyenne ES simple dans Golang
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 !
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.
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!