>  기사  >  백엔드 개발  >  Elasticsearch 쿼리 작업에 Golang을 사용하는 방법

Elasticsearch 쿼리 작업에 Golang을 사용하는 방법

PHPz
PHPz원래의
2023-04-11 09:13:361179검색

빅데이터 시대가 도래하면서 데이터 저장 및 조회에 대한 수요도 늘어나고 있습니다. Elasticsearch는 현재 상대적으로 간단하고 사용하기 쉬운 RESTful API를 제공하는 인기 있는 분산 검색 엔진입니다. 효율적인 프로그래밍 언어로서 Golang은 점점 더 많은 개발자들에게 사랑을 받고 있습니다. 이 기사에서는 Golang을 사용하여 Elasticsearch 쿼리 작업을 수행하는 방법을 소개합니다.

1. 종속 라이브러리 설치

Golang에서는 Elasticsearch 관련 작업을 수행하려면 타사 라이브러리를 사용해야 합니다. 공식적으로 제공되는 github.com/elastic/go-elasticsearch 라이브러리를 사용하는 것이 좋습니다. github.com/elastic/go-elasticsearch 库。

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

go get github.com/elastic/go-elasticsearch

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

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

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

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

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

cd $GOPATH/go-elasticsearch
go install

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

二、建立 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 成功")
}

这里我们指定 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)
    }
}

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

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

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

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

이 라이브러리를 설치하려면 터미널에서 다음 명령을 실행하세요.

rrreee

컴퓨터에서 github.com에 액세스할 수 없는 경우 다음 단계를 참조하세요. 🎜🎜1 를 방문하세요. https://github.com/elastic/go-elasticsearch에서 zip 파일을 로컬에 다운로드합니다. 🎜🎜2. zip 파일을 디렉터리에 압축을 풉니다. 🎜🎜3. 압축을 푼 디렉터리를 프로젝트 디렉터리 아래의 GOPATH 디렉터리로 이동합니다. 🎜🎜4. 터미널에서 다음 명령을 실행하세요. 🎜rrreee🎜이 프로세스는 시간이 많이 걸릴 수 있습니다. 잠시 기다려 주세요. 🎜🎜2. Elasticsearch 연결 설정🎜🎜Elasticsearch 쿼리를 수행하려면 먼저 연결을 설정해야 합니다. Golang에서는 먼저 github.com/elastic/go-elasticsearch 라이브러리를 도입한 다음 NewDefaultClient 메서드를 사용하여 연결을 설정해야 합니다. 🎜rrreee🎜여기에서는 Elasticsearch의 주소를 http://localhost:9200으로 지정합니다. Elasticsearch가 다른 주소에서 실행되는 경우 주소를 수정하세요. 🎜🎜3. Elasticsearch 데이터 쿼리🎜🎜연결이 설정된 후 Elasticsearch 쿼리 작업을 수행할 수 있습니다. Golang의 http 라이브러리를 통해 HTTP 요청을 보내고 응답 콘텐츠를 받아 Elasticsearch 쿼리 작업을 완료할 수 있습니다. 🎜🎜쿼리 인덱스 test_index 아래의 message 필드에 hello 문자열이 포함된 모든 데이터를 예로 들어 보겠습니다. 🎜rrreee🎜여기서 먼저 정의합니다. 쿼리 조건은 message 필드에 hello 문자열이 포함되어 있다는 것입니다. 그런 다음 Golang의 http 라이브러리를 사용하여 HTTP 요청을 생성하고 요청 본문에 쿼리 조건을 넣습니다. 그런 다음 es.Perform 메서드를 사용하여 요청을 보내고 응답 결과를 받습니다. 🎜🎜응답 결과가 잘못된 경우 JSON 데이터를 파싱하여 오류 정보를 얻을 수 있습니다. 응답에 오류가 없으면 쿼리 결과를 터미널에 인쇄합니다. 🎜🎜여기에서는 GET 메서드를 사용하여 쿼리 요청을 보낸다는 점에 유의하세요. 실제로 Elasticsearch는 GET, POST, PUT 등을 포함한 다양한 쿼리 요청 방법을 지원합니다. 구체적인 쿼리 방법 및 구문은 Elasticsearch 공식 문서를 참조하세요. 🎜🎜본 글에서 소개하는 방법은 Elasticsearch의 RESTful API를 기반으로 합니다. 또한 Elasticsearch는 공식적으로 제공되는 Golang 라이브러리 github.com/olivere/elastic을 사용하여 보다 유연하고 효율적인 쿼리 방법도 제공합니다. 보다 효율적인 쿼리 요구사항이 있는 경우 이 라이브러리 사용을 고려해보세요. 🎜🎜한마디로 Golang에서 쿼리에 Elasticsearch를 사용하면 매우 편리하고 빠릅니다. 강력한 데이터 쿼리 기능을 구현하려면 몇 줄의 코드만 필요합니다. 개발자는 Elasticsearch 관련 기술에 더 많은 관심을 갖고 데이터 저장 및 쿼리 기능을 향상시키는 것이 좋습니다. 🎜

위 내용은 Elasticsearch 쿼리 작업에 Golang을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.