Go整合ElasticSearch的示例代码
作者:饱腹百科
这篇文章主要介绍了Go整合ElasticSearch的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
go整合elasticsearch
基于docker搭建开发环境
在开发之前我们首先需要借助docker来构建我们的开发环境,先创建一个文件名称为docker-compose.yaml, 里面写入下面的内容:
--- 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的运行状态
验证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) }
索引相关操作
创建索引
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" // 准备文档数据 doc := Document{ Title: "Document Title", Body: "This is the body of the document.", } // 将文档数据序列化为JSON字节 data, err := json.Marshal(doc) if err != nil { log.Fatalf("Error marshaling document: %s", err) } // 创建PUT请求 req := esapi.IndexRequest{ Index: indexName, DocumentID: documentID, Body: bytes.NewReader(data), } // 发送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
到此这篇关于Go整合ElasticSearch的文章就介绍到这了,更多相关Go整合ElasticSearch内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!