Elasticsearch est un moteur de recherche distribué open source largement utilisé dans divers scénarios de recherche et d'analyse de données. Dans le même temps, en tant que langage de programmation efficace et pratique, le langage Go est également apprécié et utilisé par de plus en plus de développeurs. Pour les fonctions de requête et d'analyse de données hautes performances d'Elasticsearch, Go fournit également des bibliothèques et des frameworks de requêtes pratiques. Cet article présentera en détail les connaissances liées à l'interrogation d'Elasticsearch en langage Go pour vous aider à mieux implémenter la requête Elasticsearch.
1. Introduction à la bibliothèque du langage Go
Il existe déjà quelques bibliothèques de requêtes Elasticsearch matures dans le langage Go. Présentons-les brièvement en fonction de leurs caractéristiques respectives.
go-elasticsearch est un client Elasticsearch officiellement lancé par Elasticsearch et implémenté en langage Go. Il comprend également les fonctions de requête et d'analyse d'Elasticsearch. Surtout après la version Elasticsearch 7.x, go-elasticsearch est devenue la bibliothèque de langage Go officiellement recommandée par Elasticsearch. go-elasticsearch peut fonctionner sur plusieurs plates-formes de systèmes d'exploitation et prend déjà en charge les versions Elasticsearch 6.x et 7.x. Pour son utilisation spécifique, veuillez vous référer à la documentation officielle.
go-es est un client Elasticsearch Go open source de Xiaomi En raison de sa simplicité, de sa facilité d'utilisation et de ses fonctions complètes, il est devenu l'une des bibliothèques client Elasticsearch les plus utilisées sur le grand Internet national. entreprises. La conception des paramètres des diverses API de requête dans la bibliothèque go-es est simple et claire, et la syntaxe est très proche de la syntaxe de requête d'Elasticsearch, vous pouvez donc utiliser directement le DSL de requête Elasticsearch pour les requêtes. Pour une utilisation détaillée de cette bibliothèque, veuillez vous référer à son référentiel Github.
goes est une bibliothèque client Elasticsearch Go simple et facile à utiliser. Il réduit considérablement le coût d'apprentissage des opérations de base d'Elasticsearch et prend en charge l'utilisation de l'interface et des objets. En plus des fonctions de requête et d'analyse, Go fournit également une bibliothèque simple de calcul de coordonnées géographiques qui prend en charge le calcul des valeurs de distance et d'angle entre deux longitudes et latitudes. Pour une utilisation détaillée de kingim/goes, veuillez vous référer à son référentiel Github.
olivere/elastic est la bibliothèque client Go pour Elasticsearch. Semblables à go-elasticsearch et go-es, ils fournissent tous deux des API de requête très pratiques pour Elasticsearch. Cependant, olivere/elastic accorde plus d'attention à la sérialisation et à la désérialisation des résultats des requêtes, prend en charge l'encapsulation et le filtrage de plusieurs formats de sortie (tels que Json, XML, etc.) et convient à des scénarios tels que le front-end et le back-end. interaction résultat. Vous pouvez consulter le référentiel Github olivere/elastic pour plus de détails sur l'utilisation.
2. Requête Elasticsearch
En langage Go, grâce à la bibliothèque client Elasticsearch Go, vous pouvez facilement effectuer des opérations de requête, de recherche et d'analyse liées à Elasticsearch. Du point de vue des appels d'interface, il existe certaines différences dans la façon d'utiliser chaque bibliothèque, mais les fonctions de requête de base, la syntaxe et la logique sont similaires. Ci-dessous, nous donnons quelques exemples pour présenter comment interroger Elasticsearch dans Go.
es Les documents officiels recommandent la méthode suivante :
Package main import ( "context" "fmt" "github.com/elastic/go-elasticsearch/v7" "github.com/elastic/go-elasticsearch/v7/esapi" "github.com/elastic/go-elasticsearch/v7/esutil" ) func main() { es, _ := elasticsearch.NewDefaultClient() req := esapi.SearchRequest{ Body: esutil.NewJSONReader(map[string]interface{}{"query": map[string]interface{}{"match_all": map[string]interface{}{}}}), Index: []string{"my-index-000001"}, TrackTotalHits: true, } res, err := req.Do(context.Background(), es) fmt.Println(res, err) }
Interroger des documents contenant un certain mot
q := elastic.NewTermQuery("content", "hello") searchResult, err := client.Search(). Index("twitter"). Query(q). Do(ctx) if err != nil { log.Fatalln(err) }
Interroger des documents dans une certaine plage
terms := []string{"world", "how", "are", "you"} q1 := elastic.NewTermsQuery("content", terms...) q2 := elastic.NewRangeQuery("publish_time").Gte("2021-01-01").Lte("2021-02-01") query := elastic.NewBoolQuery().Must(q1).Filter(q2) searchResult, err := client.Search(). Index("twitter"). Query(query). From(0).Size(10). Do(ctx) if err != nil { log.Fatalln(err) }
Utiliser des fonctions d'agrégation pour obtenir une classification Statistiques
agg := elastic.NewTermsAggregation().Field("category").Size(10000) query := elastic.NewMatchAllQuery() searchResult, err := client.Search().Index("goods").Size(0).Query(query).Aggregation("by_category", agg).Do(ctx) if err != nil { log.Fatalln(err) } bucketDateHists := searchResult.Aggregations.Terms("by_category") for _, bucket := range bucketDateHists.Buckets { fmt.Printf("%v: %d\n", bucket.Key, int(bucket.DocCount)) }
3. Résumé
A travers l'introduction ci-dessus, nous pouvons constater que la bibliothèque de requêtes Elasticsearch fournie par le langage Go est très riche, et qu'elle est également très simple et efficace à utiliser. Qu’il s’agisse de recherche ou d’analyse de données, le langage Go peut jouer un rôle important. Bien sûr, si vous souhaitez approfondir votre compréhension des connaissances liées au langage Elasticsearch ou Go, il est recommandé de lire davantage de documents officiels et de code source pour approfondir votre compréhension et vos connaissances.
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!