티스토리 뷰
Go에서 Elasticsearch에 요청을 보내고 결과를 받기 위해 공식 Elasticsearch Go 클라이언트를 사용할 수 있습니다. 여기서는 Elasticsearch v7 용 Go 클라이언트를 사용하는 예제를 제공합니다.
Directory 생성
mkdir elasticsearch
cd ./elasticsearch
프로젝트 초기화
go mod init elasticsearch
Elasticsearch Go 클라이언트 설치
먼저 Elasticsearch Go 클라이언트를 설치합니다. go get 명령어를 사용합니다:
go get github.com/elastic/go-elasticsearch/v7
Elasticsearch 클라이언트를 사용하여 문서 인덱싱 및 검색 예제
다음은 Elasticsearch에 문서를 인덱싱하고 검색하는 간단한 Go 프로그램입니다.
package main
import (
"bytes"
"context"
"encoding/json"
"fmt"
"log"
"strings"
"github.com/elastic/go-elasticsearch/v7"
"github.com/elastic/go-elasticsearch/v7/esapi"
)
// Document 구조체 정의
type Document struct {
Title string `json:"title"`
Content string `json:"content"`
}
func main() {
// Elasticsearch 클라이언트 설정
cfg := elasticsearch.Config{
Addresses: []string{
"http://external-elasticsearch:9200", // 외부 Elasticsearch 클러스터의 주소
},
}
es, err := elasticsearch.NewClient(cfg)
if err != nil {
log.Fatalf("Error creating the client: %s", err)
}
// 인덱스 할 문서 정의
doc := Document{
Title: "Hello, Elasticsearch!",
Content: "This is a simple document.",
}
// 문서를 JSON으로 변환
docJSON, err := json.Marshal(doc)
if err != nil {
log.Fatalf("Error marshaling the document: %s", err)
}
// 문서 인덱싱
req := esapi.IndexRequest{
Index: "test_es_documents",
DocumentID: "1",
Body: bytes.NewReader(docJSON),
Refresh: "true",
}
res, err := req.Do(context.Background(), es)
if err != nil {
log.Fatalf("Error getting response: %s", err)
}
defer res.Body.Close()
if res.IsError() {
log.Fatalf("Error indexing document ID=%s", req.DocumentID)
} else {
fmt.Printf("Indexed document ID=%s\n", req.DocumentID)
}
// 문서 검색
var buf bytes.Buffer
query := map[string]interface{}{
"query": map[string]interface{}{
"match": map[string]interface{}{
"title": "elasticsearch",
},
},
}
if err := json.NewEncoder(&buf).Encode(query); err != nil {
log.Fatalf("Error encoding query: %s", err)
}
searchReq := esapi.SearchRequest{
Index: []string{"test_es_documents"},
Body: strings.NewReader(buf.String()),
}
searchRes, err := searchReq.Do(context.Background(), es)
if err != nil {
log.Fatalf("Error getting response: %s", err)
}
defer searchRes.Body.Close()
if searchRes.IsError() {
log.Fatalf("Error searching test_es_documents")
} else {
var result map[string]interface{}
if err := json.NewDecoder(searchRes.Body).Decode(&result); err != nil {
log.Fatalf("Error parsing the response body: %s", err)
}
// 검색 결과 출력
fmt.Printf("Search result: %+v\n", result)
}
}
결과
Indexed document ID=1
Search result: map[_shards:map[failed:0 skipped:0 successful:1 total:1] hits:map[hits:[map[_id:1 _index:test_es_documents _score:0.2876821 _source:map[content:This is a simple document. title:Hello, Elasticsearch!] _type:_doc]] max_score:0.2876821 total:map[relation:eq value:1]] timed_out:false took:0]
설명
- Elasticsearch 클라이언트 설정: elasticsearch.NewDefaultClient() 함수를 사용하여 기본 설정으로 Elasticsearch 클라이언트를 만듭니다.
- 문서 정의: Document 구조체를 정의하고 인덱싱할 문서를 만듭니다.
- 문서 인덱싱:
- docJSON 변수에 문서를 JSON으로 변환합니다.
- esapi.IndexRequest 구조체를 사용하여 문서 인덱싱 요청을 만듭니다.
- req.Do 메서드를 호출하여 인덱싱 요청을 수행하고 응답을 처리합니다.
- 문서 검색:
- query 변수에 검색 쿼리를 정의합니다.
- esapi.SearchRequest 구조체를 사용하여 검색 요청을 만듭니다.
- searchReq.Do 메서드를 호출하여 검색 요청을 수행하고 응답을 처리합니다.
이 예제는 Elasticsearch에 문서를 인덱싱하고, 그 문서를 검색하는 과정을 보여줍니다. 이를 통해 Elasticsearch Go 클라이언트를 사용하여 데이터를 인덱싱하고 검색하는 방법을 이해할 수 있습니다.
출처 : chatGPT
'go' 카테고리의 다른 글
Go Kit 사용자 정보 등록/수정/삭제/조회 예제 - DB (0) | 2024.07.18 |
---|---|
Go Kit 사용자 정보 등록/수정/삭제/조회 예제 (0) | 2024.07.18 |
Go kit 예제 프로젝트 생성 (0) | 2024.07.17 |
Go kit 프레임워크 (0) | 2024.07.17 |
Go 삭제 후 Homebrew로 설치하기(go kit 설치) (0) | 2024.07.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 메시지
- 샘플
- 설정
- REST
- RESTful
- restful서비스
- java
- 스프링
- 스프링부트
- example
- UI
- 그리드
- springboot
- listToMap
- spring
- thymeleaf
- mapToList
- sample
- cache
- ag grid
- 타임리프
- Spring Boot
- SHEETJS
- lombok
- oracle
- Javascript
- 예제
- AG-GRID
- mybatis
- 엑셀
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함