Maison  >  Article  >  développement back-end  >  Comment développer une application pour la récupération ES à l'aide de Golang

Comment développer une application pour la récupération ES à l'aide de Golang

PHPz
PHPzoriginal
2023-04-05 14:37:151032parcourir

Avec le développement rapide des applications Internet, les données massives sont devenues une norme, et un stockage et une interrogation efficaces de ces données sont devenus très importants. Search Engine est un moteur de récupération distribué efficace et évolutif pour les environnements de stockage de données distribués à grande échelle. Il s'agit d'une technologie orientée vers le domaine de la récupération de texte.

ElasticSearch (ES) est un moteur de recherche développé sur la base de la bibliothèque Lucene. Il s'agit d'un moteur de recherche en texte intégral distribué basé sur une architecture RESTful qui peut prendre en charge la recherche en temps réel, l'analyse de données et d'autres fonctions. En raison de sa nature open source et de sa facilité d'utilisation, ElasticSearch est de plus en plus privilégié par les développeurs. Cet article expliquera comment utiliser Golang pour développer des applications pour la récupération ES.

Tout d'abord, nous devons installer le client ES dans le langage de programmation Go. Le client d'ES utilise une architecture RESTful, nous pouvons donc utiliser la bibliothèque de requêtes HTTP de Go pour interagir avec ES. Ensuite, nous pouvons appeler l'API ES RESTful pour implémenter une recherche simple en référence à l'exemple de code suivant :

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "bytes"
)

type SearchResult struct {
    Hits struct {
        Total int `json:"total"`
        Hits []struct {
            Source interface{} `json:"_source"`
        } `json:"hits"`
    } `json:"hits"`
}

func main() {
    query := "hello"
    url := fmt.Sprintf("http://localhost:9200/_search?q=%s", query)
    resp, _ := http.Get(url)
    defer resp.Body.Close()
    var result SearchResult
    json.NewDecoder(resp.Body).Decode(&result)
    b, _ := json.Marshal(result.Hits.Hits)
    fmt.Println(string(b))
}

Tout d'abord, nous définissons une structure nommée SearchResult pour stocker les résultats de la recherche ES. Ensuite, nous avons utilisé la fonction fmt.Sprintf pour construire l'URL de recherche, soumis la demande à ES via la fonction http.Get et analysé le résultat dans la structure.

Enfin, nous sérialisons les résultats au format JSON et les imprimons sur la console. De cette façon, nous pouvons utiliser le langage Go pour rechercher des documents en ES très simplement.

Cependant, cette méthode ne convient qu'aux applications de recherche simples. Pour les opérations qui nécessitent des fonctions plus riches comme la recherche par conditions ou l'agrégation, nous devons utiliser le client Golang officiellement fourni par ES : go-elasticsearch.

Tout d’abord, nous devons installer la bibliothèque go-elasticsearch officiellement fournie. Vous pouvez utiliser la commande suivante pour installer :

go get github.com/elastic/go-elasticsearch/v8

Ensuite, nous implémentons la requête ES via l'exemple de code suivant :

package main

import (
    "context"
    "fmt"
    "github.com/elastic/go-elasticsearch/v8"
    "github.com/elastic/go-elasticsearch/v8/esapi"
    "encoding/json"
    "bytes"
)

type SearchResult struct {
    Hits struct {
        Total int `json:"total"`
        Hits []struct {
            Source interface{} `json:"_source"`
        } `json:"hits"`
    } `json:"hits"`
}

func main() {
    es, err := elasticsearch.NewDefaultClient()
    if err != nil {
        fmt.Println("Error creating Elasticsearch client:", err)
        return
    }

    query := "hello"

    var buf bytes.Buffer
    queryMap := map[string]interface{}{
        "query": map[string]interface{}{
            "match": map[string]interface{}{
                "message": query,
            },
        },
    }
    if err := json.NewEncoder(&buf).Encode(queryMap); err != nil {
        fmt.Println("Error encoding query:", err)
        return
    }

    req := esapi.SearchRequest{
        Index: []string{"my_index"},
        Body:  &buf,
        Pretty: true,
    }

    res, err := req.Do(context.Background(), es)
    if err != nil {
        fmt.Println("Error searching for documents:", err)
        return
    }
    defer res.Body.Close()

    var result SearchResult
    json.NewDecoder(res.Body).Decode(&result)
    b, _ := json.Marshal(result.Hits.Hits)
    fmt.Println(string(b))
}

Tout d'abord, nous créons un client Elasticsearch, puis définissons les mots-clés de la requête. Ensuite, nous construisons une carte au format JSON contenant les conditions de requête et l'encodons en buf via la fonction json.NewEncoder.

Enfin, nous utilisons l'API ES fournie par la bibliothèque go-elasticsearch pour envoyer des requêtes de requête à ES, et lire et analyser les réponses aux requêtes.

L'utilisation de la bibliothèque go-elasticsearch peut facilement implémenter des fonctions de recherche ES complexes et rendre le code plus élégant et simple. L'utilisation de Golang pour la recherche ES améliore considérablement la vitesse de recherche tout en maintenant l'efficacité du code.

En bref, Golang est un langage de programmation concis et efficace, et il est très simple de l'utiliser pour implémenter la recherche ES. J'espère que cet article pourra vous aider à comprendre l'utilisation de la recherche ES et de la bibliothèque go-elasticsearch.

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:
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