Heim > Backend-Entwicklung > Golang > So verwenden Sie Golang für Elasticsearch-Abfragevorgänge

So verwenden Sie Golang für Elasticsearch-Abfragevorgänge

PHPz
Freigeben: 2023-04-11 10:07:44
Original
1290 Leute haben es durchsucht

Mit dem Aufkommen des Big-Data-Zeitalters steigt auch die Nachfrage nach Datenspeicherung und -abfrage. Elasticsearch ist derzeit eine beliebte verteilte Suchmaschine, die eine relativ einfache und benutzerfreundliche RESTful-API bietet. Als effiziente Programmiersprache wird Golang von immer mehr Entwicklern geliebt. In diesem Artikel wird erläutert, wie Sie mit Golang Elasticsearch-Abfragevorgänge ausführen.

1. Abhängige Bibliotheksinstallation

In Golang müssen wir eine Drittanbieterbibliothek verwenden, um Elasticsearch-bezogene Vorgänge auszuführen. Es wird empfohlen, die offiziell bereitgestellte Bibliothek github.com/elastic/go-elasticsearch zu verwenden. github.com/elastic/go-elasticsearch 库。

要安装这个库,只需要在终端中运行以下命令即可:

go get github.com/elastic/go-elasticsearch
Nach dem Login kopieren

如果你的电脑无法访问 github.com,请参考以下步骤:

1.访问 https://github.com/elastic/go-elasticsearch ,下载 zip 文件到本地。

2.将 zip 文件解压到某个目录下。

3.将解压后的目录移动至您的工程目录下的 GOPATH 目录。

4.在终端运行以下命令:

cd $GOPATH/go-elasticsearch
go install
Nach dem Login kopieren

这个过程可能比较耗时,请耐心等待。

二、建立 Elasticsearch 连接

要进行 Elasticsearch 查询,我们需要先建立连接。在 Golang 中,首先需要引入 github.com/elastic/go-elasticsearch 库,然后使用 NewDefaultClient 方法即可建立连接。

import (
    "fmt"
    "github.com/elastic/go-elasticsearch"
    "log"
)

func main() {
    cfg := elasticsearch.Config{
        Addresses: []string{
            "http://localhost:9200",
        },
    }
    es, err := elasticsearch.NewClient(cfg)
    if err != nil {
        log.Fatalf("连接 Elasticsearch 失败:%s", err)
    }
    fmt.Println("连接 Elasticsearch 成功")
}
Nach dem Login kopieren

这里我们指定 Elasticsearch 的地址为 http://localhost:9200,如果您的 Elasticsearch 运行在其他地址上,请修改该地址即可。

三、查询 Elasticsearch 数据

建立连接后,就可以进行 Elasticsearch 的查询操作了。我们可以通过 Golang 中的 http 库发送 HTTP 请求,并接收响应内容,即可完成 Elasticsearch 的查询操作。

以查询索引 test_indexmessage 字段包含 hello 字符串的所有数据为例:

import (
    "bytes"
    "encoding/json"
    "fmt"
    "github.com/elastic/go-elasticsearch"
    "github.com/elastic/go-elasticsearch/esapi"
    "io/ioutil"
    "log"
    "net/http"
    "strings"
)

func main() {
    cfg := elasticsearch.Config{
        Addresses: []string{
            "http://localhost:9200",
        },
    }
    es, err := elasticsearch.NewClient(cfg)
    if err != nil {
        log.Fatalf("连接 Elasticsearch 失败:%s", err)
    }
    fmt.Println("连接 Elasticsearch 成功")

    var (
        r map[string]interface{}
        b bytes.Buffer
    )

    query := map[string]interface{}{
        "query": map[string]interface{}{
            "match": map[string]interface{}{
                "message": "hello",
            },
        },
    }

    if err := json.NewEncoder(&b).Encode(query); err != nil {
        log.Fatalf("无法编码查询:%s", err)
    }

    req, _ := http.NewRequest("GET", "/test_index/_search", &b)
    req.Header.Add("Content-Type", "application/json")

    res, err := es.Perform(req)
    if err != nil {
        log.Fatalf("查询 Elasticsearch 失败:%s", err)
    }

    defer res.Body.Close()

    if res.IsError() {
        var r map[string]interface{}
        if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
            log.Fatalf("响应错误:%s", err)
        } else {
            // 响应错误信息
            log.Fatalf("响应错误:%s", r["error"].(map[string]interface{})["reason"])
        }
    }

    if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
        log.Fatalf("响应结果解析失败:%s", err)
    }

    results := r["hits"].(map[string]interface{})["hits"].([]interface{})
    fmt.Printf("共找到 %d 条匹配结果:\n", len(results))
    for _, result := range results {
        message := result.(map[string]interface{})["_source"].(map[string]interface{})["message"].(string)
        fmt.Printf("%s\n", message)
    }
}
Nach dem Login kopieren

这里我们首先定义了一个查询条件,即 message 字段包含 hello 字符串。然后使用 Golang 的 http 库创建了一个 HTTP 请求,并将该查询条件放在了请求体中。接着使用 es.Perform 方法发送请求,并接收响应结果。

如果响应结果出错,我们可以通过解析 JSON 数据,得到错误信息。如果响应结果没有出错,我们将查询结果打印在终端中。

需要注意的是,这里我们使用了 GET 方法发送了一个查询请求。实际上,Elasticsearch 支持多种不同的查询请求方式,包括 GETPOSTPUT 等。具体查询方式和语法,请参考 Elasticsearch 官方文档。

本文介绍的方法基于 Elasticsearch 的 RESTful API。除此之外,Elasticsearch 还提供了一种更加灵活高效的查询方式,即使用其官方提供的 Golang 库 github.com/olivere/elastic

Um diese Bibliothek zu installieren, führen Sie einfach den folgenden Befehl im Terminal aus:

rrreee

Wenn Ihr Computer nicht auf github.com zugreifen kann, befolgen Sie bitte die folgenden Schritte: 🎜🎜1 https://github.com/elastic/go-elasticsearch, laden Sie die zip-Datei auf lokal herunter. 🎜🎜2. Entpacken Sie die zip-Datei in ein Verzeichnis. 🎜🎜3. Verschieben Sie das entpackte Verzeichnis in das Verzeichnis GOPATH unter Ihrem Projektverzeichnis. 🎜🎜4. Führen Sie den folgenden Befehl im Terminal aus: 🎜rrreee🎜Dieser Vorgang kann zeitaufwändig sein, bitte haben Sie etwas Geduld. 🎜🎜2. Stellen Sie eine Elasticsearch-Verbindung her🎜🎜Um Elasticsearch-Abfragen durchzuführen, müssen wir zuerst eine Verbindung herstellen. In Golang müssen Sie zunächst die Bibliothek github.com/elastic/go-elasticsearch einführen und dann die Methode NewDefaultClient verwenden, um eine Verbindung herzustellen. 🎜rrreee🎜Hier geben wir die Adresse von Elasticsearch als http://localhost:9200 an. Wenn Ihr Elasticsearch unter einer anderen Adresse läuft, ändern Sie bitte die Adresse. 🎜🎜3. Elasticsearch-Daten abfragen🎜🎜Nach dem Herstellen der Verbindung können Sie Elasticsearch-Abfragevorgänge ausführen. Wir können HTTP-Anfragen über die http-Bibliothek in Golang senden und den Antwortinhalt empfangen, um den Elasticsearch-Abfragevorgang abzuschließen. 🎜🎜Nehmen Sie als Beispiel alle Daten, bei denen das Feld message unter dem Abfrageindex test_index die Zeichenfolge hello enthält: 🎜rrreee🎜Hier definieren wir zunächst Eine Abfrage. Die Bedingung ist, dass das Feld message die Zeichenfolge hello enthält. Verwenden Sie dann die http-Bibliothek von Golang, um eine HTTP-Anfrage zu erstellen und die Abfragebedingungen in den Anfragetext einzufügen. Verwenden Sie dann die Methode es.Perform, um die Anfrage zu senden und das Antwortergebnis zu empfangen. 🎜🎜Wenn das Antwortergebnis falsch ist, können wir die Fehlerinformationen durch Parsen der JSON-Daten erhalten. Wenn die Antwort keine Fehler enthält, drucken wir die Abfrageergebnisse im Terminal aus. 🎜🎜Es ist zu beachten, dass wir hier die Methode GET verwenden, um eine Abfrageanforderung zu senden. Tatsächlich unterstützt Elasticsearch eine Vielzahl verschiedener Abfrageanforderungsmethoden, einschließlich GET, POST, PUT usw. Informationen zu spezifischen Abfragemethoden und Syntax finden Sie in der offiziellen Dokumentation von Elasticsearch. 🎜🎜Die in diesem Artikel vorgestellte Methode basiert auf der RESTful-API von Elasticsearch. Darüber hinaus bietet Elasticsearch mithilfe seiner offiziell bereitgestellten Golang-Bibliothek github.com/olivere/elastic auch eine flexiblere und effizientere Abfragemethode. Wenn Sie effizientere Abfrageanforderungen haben, sollten Sie die Verwendung dieser Bibliothek in Betracht ziehen. 🎜🎜Kurz gesagt, es ist sehr bequem und schnell, Elasticsearch für Abfragen in Golang zu verwenden. Zur Implementierung leistungsstarker Datenabfragefunktionen sind nur wenige Codezeilen erforderlich. Es wird empfohlen, dass Entwickler den Elasticsearch-bezogenen Technologien mehr Aufmerksamkeit schenken und ihre Datenspeicher- und Abfragefunktionen verbessern. 🎜

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Golang für Elasticsearch-Abfragevorgänge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage