Maison > développement back-end > Golang > Parlons des connaissances sur l'interrogation d'Elasticsearch en langage Go

Parlons des connaissances sur l'interrogation d'Elasticsearch en langage Go

PHPz
Libérer: 2023-04-10 15:46:00
original
999 Les gens l'ont consulté

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.

  1. go-elasticsearch

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.

  1. go-es

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.

  1. kingim/goes

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.

  1. olivere/elastic

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.

  1. Interroger tous les documents

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)
    }
Copier après la connexion
  1. 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)
     }
    Copier après la connexion
  2. 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)
     }
    Copier après la connexion
  3. 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))
     }
    Copier après la connexion

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!

source:php.cn
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