Go整合ElasticSearch的示例代碼
go整合elasticsearch
基于docker搭建開發(fā)環(huán)境
在開發(fā)之前我們首先需要借助docker來構(gòu)建我們的開發(fā)環(huán)境,先創(chuàng)建一個文件名稱為docker-compose.yaml, 里面寫入下面的內(nèi)容:
--- version: "3" services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0 container_name: es01 environment: - node.name=es01 - cluster.name=docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - discovery.type=single-node ulimits: memlock: soft: -1 hard: -1 volumes: - esdata:/usr/share/elasticsearch/data ports: - 9200:9200 kibana: image: docker.elastic.co/kibana/kibana:7.10.0 ports: - 5601:5601 depends_on: - elasticsearch volumes: esdata: driver: local
使用docker-compose up -d 啟動容器,之后在瀏覽器中分別驗證es和kibana的運行狀態(tài)
驗證es:http://localhost:9200/
驗證kibana:http://localhost:5601
檢查客戶端api
package main import ( "fmt" "github.com/elastic/go-elasticsearch/v7" ) func main() { es, err := elasticsearch.NewDefaultClient() if err != nil { fmt.Println(err) return } res, err := es.Info() if err != nil { fmt.Println(err) return } defer res.Body.Close() fmt.Println(res) }
索引相關(guān)操作
創(chuàng)建索引
package main import ( "context" "fmt" "github.com/elastic/go-elasticsearch/v7" "log" ) func main() { cfg := elasticsearch.Config{ Addresses: []string{ "http://localhost:9200", }, } es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatalf("Error creating the client: %s", err) } indexName := "test_20230726" res, err := es.Indices.Create( indexName, es.Indices.Create.WithContext(context.Background()), es.Indices.Create.WithPretty()) if err != nil { log.Fatalf("Error creating the index: %s", err) } defer res.Body.Close() fmt.Println(res.String()) }
刪除索引
package main import ( "context" "fmt" "github.com/elastic/go-elasticsearch/v7" "log" ) func main() { cfg := elasticsearch.Config{ Addresses: []string{ "http://localhost:9200", }, } es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatalf("Error creating the client: %s", err) } indexName := "test_20230726" res, err := es.Indices.Delete( []string{indexName}, es.Indices.Delete.WithContext(context.Background()), es.Indices.Delete.WithIgnoreUnavailable(true), es.Indices.Delete.WithPretty(), ) if err != nil { log.Fatalf("Error deleting the index: %s", err) } defer res.Body.Close() fmt.Println(res.String()) }
修改索引
package main import ( "bytes" "context" "encoding/json" "fmt" "github.com/elastic/go-elasticsearch/v7" "github.com/elastic/go-elasticsearch/v7/esapi" "log" ) func main() { cfg := elasticsearch.Config{ Addresses: []string{ "http://localhost:9200", }, } es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatalf("Error creating the client: %s", err) } indexName := "your_index_name" documentID := "your_document_id" // 準備文檔數(shù)據(jù) doc := Document{ Title: "Document Title", Body: "This is the body of the document.", } // 將文檔數(shù)據(jù)序列化為JSON字節(jié) data, err := json.Marshal(doc) if err != nil { log.Fatalf("Error marshaling document: %s", err) } // 創(chuàng)建PUT請求 req := esapi.IndexRequest{ Index: indexName, DocumentID: documentID, Body: bytes.NewReader(data), } // 發(fā)送PUT請求 res, err := req.Do(context.Background(), es) if err != nil { log.Fatalf("Error indexing document: %s", err) } defer res.Body.Close() fmt.Println(res.String()) }
查詢索引列表
package main import ( "encoding/json" "fmt" "github.com/elastic/go-elasticsearch/v7" "log" ) func main() { cfg := elasticsearch.Config{ Addresses: []string{ "http://localhost:9200", }, } es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatalf("Error creating the client: %s", err) } res, err := es.Indices.Get([]string{"_all"}) if err != nil { log.Fatalf("Error getting indices: %s", err) } defer res.Body.Close() if res.IsError() { log.Fatalf("Error response: %s", res.String()) } var result map[string]interface{} if err := json.NewDecoder(res.Body).Decode(&result); err != nil { log.Fatalf("Error parsing the response body: %s", err) } indices, ok := result["test_20230726"].(map[string]interface{}) if !ok { log.Fatalf("Invalid indices format in the response") } for index := range indices { fmt.Println(index) } }
插入文檔
package main import ( "bytes" "context" "encoding/json" "fmt" "github.com/elastic/go-elasticsearch/v7" "github.com/elastic/go-elasticsearch/v7/esapi" "log" ) type Document struct { Title string `json:"title"` Body string `json:"body"` } func main() { cfg := elasticsearch.Config{ Addresses: []string{ "http://localhost:9200", }, } es, err := elasticsearch.NewClient(cfg) if err != nil { log.Fatalf("Error creating the client: %s", err) } indexName := "test_20230726" documentID := "20230726" doc := Document{ Title: "Document Title", Body: "This is the body of the document.", } data, err := json.Marshal(doc) if err != nil { log.Fatalf("Error marshaling document: %s", err) } req := esapi.IndexRequest{ Index: indexName, DocumentID: documentID, Body: bytes.NewReader(data), } res, err := req.Do(context.Background(), es) if err != nil { log.Fatalf("Error indexing document: %s", err) } defer res.Body.Close() fmt.Println(res.String())
參考資料
https://cloud.tencent.com/developer/article/1911255
到此這篇關(guān)于Go整合ElasticSearch的文章就介紹到這了,更多相關(guān)Go整合ElasticSearch內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go select編譯期的優(yōu)化處理邏輯使用場景分析
select 是 Go 中的一個控制結(jié)構(gòu),類似于用于通信的 switch 語句。每個 case 必須是一個通信操作,要么是發(fā)送要么是接收。接下來通過本文給大家介紹go select編譯期的優(yōu)化處理邏輯使用場景分析,感興趣的朋友一起看看吧2021-06-06Go語言生成UUID的利器(github.com/google/uuid)
UUID是確保每個元素唯一性的重要工具,Go語言雖然在標準庫中沒有直接提供UUID生成功能,但可以通過安裝github.com/google/uuid庫來實現(xiàn),本文就來介紹一下,感興趣的可以了解一下2024-11-11Go語言實現(xiàn)的樹形結(jié)構(gòu)數(shù)據(jù)比較算法實例
這篇文章主要介紹了Go語言實現(xiàn)的樹形結(jié)構(gòu)數(shù)據(jù)比較算法,實例分析了樹形結(jié)構(gòu)數(shù)據(jù)比較算法的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-02-02