>백엔드 개발 >Golang >Go에서 Elasticsearch 사용: 전체 가이드

Go에서 Elasticsearch 사용: 전체 가이드

WBOY
WBOY원래의
2023-06-17 14:37:402557검색

Go에서 Elasticsearch 사용: 전체 가이드

Elasticsearch는 대량의 데이터를 처리하는 데 사용할 수 있는 인기 있는 오픈 소스 검색 및 분석 엔진입니다. 전체 텍스트 검색, 실시간 분석, 데이터 시각화 및 기타 기능을 지원하며 다양한 애플리케이션 시나리오에 적합합니다. 동시에 Go 언어는 개발자들 사이에서 점점 더 인기를 얻고 있는 빠르고 효율적인 프로그래밍 언어입니다. 이번 글에서는 Elasticsearch를 사용하여 Go 언어로 검색 및 분석 기능을 구현하는 방법을 소개하겠습니다.

1. Elasticsearch 설치 및 구성

먼저 Elasticsearch를 설치하고 구성해야 합니다. Linux 환경에서는 명령줄을 사용하여 설치할 수 있습니다. 설치가 완료되면 구성 파일 elasticsearch.yml을 수정하고 Elasticsearch의 수신 주소 및 데이터 저장 경로와 같은 매개변수를 구성해야 합니다.

2. Elasticsearch 클라이언트 라이브러리 소개

Go 언어는 다음과 같은 간단한 가져오기 문을 통해 도입할 수 있는 다양한 Elasticsearch 클라이언트 라이브러리를 제공합니다.

import "github.com/olivere/elastic"

여기에서는 Olivere/elastic 라이브러리를 사용합니다.

3. Elasticsearch에 연결

Elasticsearch에 연결하는 것은 매우 간단합니다. 예를 들어 다음과 같이 Elasticsearch 인스턴스의 주소만 지정하면 됩니다. 연결이 성공하면 Elasticsearch의 다양한 API를 사용할 수 있습니다. 데이터를 색인화하고 쿼리하고 분석합니다.

4. 인덱스 데이터

Elasticsearch에서는 데이터가 문서 형식으로 저장되며, 각 문서에는 검색 및 업데이트 작업을 위한 고유한 ID가 있습니다. 대량 API를 사용하여 여러 문서를 한 번에 인덱싱할 수 있습니다. 예:

client, err := elastic.NewClient(
    elastic.SetURL("http://localhost:9200"),
)
if err != nil {
    // 处理连接失败的错误
}

이 예에서는 ID, 제목, 작성자 및 언어와 같은 필드가 포함된 Book이라는 구조를 정의합니다. 다음으로, 세 개의 Book 객체 조각을 구성하고 Bulk API를 사용하여 각 문서를 하나씩 색인화합니다. 그 중 Index 및 Type 매개변수는 각각 인덱스 이름과 문서 유형 이름을 지정하고, Id 매개변수는 문서의 고유 ID를 지정하며, Doc 매개변수는 실제 문서 객체를 지정합니다. 마지막으로, 인덱싱 작업을 수행하기 위해 Bulk.Do() 메서드를 호출합니다.

5. 데이터 검색

검색 작업을 수행하려면 검색 API를 사용해야 합니다. 예:

// 准备数据
type Book struct {
    ID       string `json:"id"`
    Title    string `json:"title"`
    Author   string `json:"author"`
    Language string `json:"language"`
}

books := []Book{
    {ID: "1", Title: "The Go Programming Language", Author: "Alan A. A. Donovan, Brian W. Kernighan", Language: "English"},
    {ID: "2", Title: "Go Web Programming", Author: "Sau Sheong Chang", Language: "English"},
    {ID: "3", Title: "Go in Action", Author: "William Kennedy, Brian Ketelsen, Erik St. Martin", Language: "English"},
}

// 使用Bulk API进行索引
bulk := client.Bulk()
for _, book := range books {
    req := elastic.NewBulkIndexRequest().Index("books").Type("doc").Id(book.ID).Doc(book)
    bulk.Add(req)
}
response, err := bulk.Do(context.Background())
if err != nil {
    // 处理错误
}

이 예에서는 제목 필드에 "go 프로그래밍"이 포함되어야 하는 쿼리 조건을 구성했습니다. 언어 필드는 "english"입니다. 다음으로 Search API를 사용하여 인덱스 이름, 문서 유형 이름 및 쿼리 기준을 지정하여 검색 작업을 요청합니다. 성공적으로 실행되면 반환된 searchResult 개체에는 일치하는 모든 문서가 포함됩니다. searchResult.Hits.Hits 요소를 탐색하고 문서 개체를 하나씩 구문 분석하여 책 조각에 넣을 수 있습니다.

6. 데이터 분석

데이터를 분석하려면 Aggregation API를 사용해야 합니다. 예:

// 准备查询条件
query := elastic.NewBoolQuery().Must(
    elastic.NewMatchQuery("title", "go programming"),
    elastic.NewMatchQuery("language", "english"),
)

// 构造Search API请求
searchResult, err := client.Search().Index("books").Type("doc").Query(query).Do(context.Background())
if err != nil {
    // 处理错误
}

// 处理Search API响应
var books []Book
for _, hit := range searchResult.Hits.Hits {
    var book Book
    err := json.Unmarshal(*hit.Source, &book)
    if err != nil {
        // 处理解析错误
    }
    books = append(books, book)
}
fmt.Println(books)

이 예에서는 작성자 이름(author.keyword)별로 그룹화하고 각 항목을 계산하는 집계 조건을 구성했습니다. 그룹의 문서 수입니다. 다음으로 Aggregation API를 사용하여 인덱스 이름, 문서 유형 이름 및 집계 조건을 지정하여 집계 작업을 요청합니다. 성공적으로 실행되면 반환된 searchResult 객체에는 모든 그룹화 및 통계 결과가 포함됩니다. searchResult.Aggregations.Terms 메서드를 통해 by_author 집계 조건에 액세스하고 Buckets 요소를 순회하며 각 그룹화 및 문서의 수를 하나씩 출력할 수 있습니다.

요약

이 글에서는 Elasticsearch를 활용하여 Go 언어로 검색 및 분석 기능을 구현하는 방법을 소개했습니다. 먼저 Elasticsearch를 설치 및 구성하고 Olivere/elastic 클라이언트 라이브러리를 도입했습니다. 다음으로 Elasticsearch에 연결하고, 데이터를 색인화하고, 데이터를 검색하고, 데이터를 분석하는 방법을 다루었습니다. 이러한 예제를 통해 Elasticsearch 및 Go 언어를 빠르게 시작하고 고급 기능을 심층적으로 배울 수 있습니다.

위 내용은 Go에서 Elasticsearch 사용: 전체 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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