登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: Golang使用Elasticsearch [zt]     [回主站]     [分站链接]
Golang使用Elasticsearch [zt]
clq
浏览(200) - 2020-06-12 21:05:02 发表 编辑

关键字: golang

Golang使用Elasticsearch [zt]

https://studygolang.com/articles/28869


Golang使用Elasticsearch


创建es.go文件
根据elasticsearch版本拉取对应的go包:github.com/elastic/go-elasticsearch
API文档:https://pkg.go.dev/github.com/elastic/go-elasticsearch/v6@v6.8.5/esapi?tab=doc

package es

import (
"bytes"
"context"
"encoding/json"
"fmt"
"github.com/elastic/go-elasticsearch/v6"
"log"
)

func failOnError(err error, msg string) {
if err != nil {
log.Fatalf("%s: %s", msg, err)
}
}

Index 在索引中创建或更新文档
索引不存在的情况下,会自动创建索引。
默认的_type(类型)是_doc,下面是指定doc类型创建添加的。

func Index() {
addresses := []string{"http://127.0.0.1:9200", "http://127.0.0.1:9201"}
config := elasticsearch.Config{
Addresses: addresses,
Username: "",
Password: "",
CloudID: "",
APIKey: "",
}
// new client
es, err := elasticsearch.NewClient(config)
failOnError(err, "Error creating the client")
// Index creates or updates a document in an index
var buf bytes.Buffer
doc := map[string]interface{}{
"title": "你看到外面的世界是什么样的?",
"content": "外面的世界真的很精彩",
}
if err := json.NewEncoder(&buf).Encode(doc); err != nil {
failOnError(err, "Error encoding doc")
}
res, err := es.Index("demo", &buf, es.Index.WithDocumentType("doc"))
if err != nil {
failOnError(err, "Error Index response")
}
defer res.Body.Close()
fmt.Println(res.String())
}

Search 搜索

func Search() {
addresses := []string{"http://127.0.0.1:9200", "http://127.0.0.1:9201"}
config := elasticsearch.Config{
Addresses: addresses,
Username: "",
Password: "",
CloudID: "",
APIKey: "",
}
// new client
es, err := elasticsearch.NewClient(config)
failOnError(err, "Error creating the client")
// info
res, err := es.Info()
failOnError(err, "Error getting response")
fmt.Println(res.String())
// search - highlight
var buf bytes.Buffer
query := map[string]interface{}{
"query": map[string]interface{}{
"match": map[string]interface{}{
"title": "中国",
},
},
"highlight": map[string]interface{}{
"pre_tags" : []string{""},
"post_tags" : []string{"
"},
"fields" : map[string]interface{}{
"title" : map[string]interface{}{},
},
},
}
if err := json.NewEncoder(&buf).Encode(query); err != nil {
failOnError(err, "Error encoding query")
}
// Perform the search request.
res, err = es.Search(
es.Search.WithContext(context.Background()),
es.Search.WithIndex("demo"),
es.Search.WithBody(&buf),
es.Search.WithTrackTotalHits(true),
es.Search.WithPretty(),
)
if err != nil {
failOnError(err, "Error getting response")
}
defer res.Body.Close()
fmt.Println(res.String())
}

DeleteByQuery 通过匹配条件删除文档

func DeleteByQuery() {
addresses := []string{"http://127.0.0.1:9200", "http://127.0.0.1:9201"}
config := elasticsearch.Config{
Addresses: addresses,
Username: "",
Password: "",
CloudID: "",
APIKey: "",
}
// new client
es, err := elasticsearch.NewClient(config)
failOnError(err, "Error creating the client")
// DeleteByQuery deletes documents matching the provided query
var buf bytes.Buffer
query := map[string]interface{}{
"query": map[string]interface{}{
"match": map[string]interface{}{
"title": "外面",
},
},
}
if err := json.NewEncoder(&buf).Encode(query); err != nil {
failOnError(err, "Error encoding query")
}
index := []string{"demo"}
res, err := es.DeleteByQuery(index, &buf)
if err != nil {
failOnError(err, "Error delete by query response")
}
defer res.Body.Close()
fmt.Println(res.String())
}

Delete通过_id删除文档

func Delete() {
addresses := []string{"http://127.0.0.1:9200", "http://127.0.0.1:9201"}
config := elasticsearch.Config{
Addresses: addresses,
Username: "",
Password: "",
CloudID: "",
APIKey: "",
}
// new client
es, err := elasticsearch.NewClient(config)
failOnError(err, "Error creating the client")
// Delete removes a document from the index
res, err := es.Delete("demo", "POcKSHIBX-ZyL96-ywQO")
if err != nil {
failOnError(err, "Error delete by id response")
}
defer res.Body.Close()
fmt.Println(res.String())
}

Create 添加文档(需要指定_id,_id已存在返回409)

func Create() {
addresses := []string{"http://127.0.0.1:9200", "http://127.0.0.1:9201"}
config := elasticsearch.Config{
Addresses: addresses,
Username: "",
Password: "",
CloudID: "",
APIKey: "",
}
// new client
es, err := elasticsearch.NewClient(config)
failOnError(err, "Error creating the client")
// Create creates a new document in the index.
// Returns a 409 response when a document with a same ID already exists in the index.
var buf bytes.Buffer
doc := map[string]interface{}{
"title": "你看到外面的世界是什么样的?",
"content": "外面的世界真的很精彩",
}
if err := json.NewEncoder(&buf).Encode(doc); err != nil {
failOnError(err, "Error encoding doc")
}
res, err := es.Create("demo", "esd", &buf, es.Create.WithDocumentType("doc"))
if err != nil {
failOnError(err, "Error create response")
}
defer res.Body.Close()
fmt.Println(res.String())
}

Get 通过id获取文档

func Get() {
addresses := []string{"http://127.0.0.1:9200", "http://127.0.0.1:9201"}
config := elasticsearch.Config{
Addresses: addresses,
Username: "",
Password: "",
CloudID: "",
APIKey: "",
}
// new client
es, err := elasticsearch.NewClient(config)
failOnError(err, "Error creating the client")
res, err := es.Get("demo", "esd")
if err != nil {
failOnError(err, "Error get response")
}
defer res.Body.Close()
fmt.Println(res.String())
}

Update 通过_id更新文档

func Update() {
addresses := []string{"http://127.0.0.1:9200", "http://127.0.0.1:9201"}
config := elasticsearch.Config{
Addresses: addresses,
Username: "",
Password: "",
CloudID: "",
APIKey: "",
}
// new client
es, err := elasticsearch.NewClient(config)
failOnError(err, "Error creating the client")
// Update updates a document with a script or partial document.
var buf bytes.Buffer
doc := map[string]interface{}{
"doc": map[string]interface{}{
"title": "更新你看到外面的世界是什么样的?",
"content": "更新外面的世界真的很精彩",
},
}
if err := json.NewEncoder(&buf).Encode(doc); err != nil {
failOnError(err, "Error encoding doc")
}
res, err := es.Update("demo", "esd", &buf, es.Update.WithDocumentType("doc"))
if err != nil {
failOnError(err, "Error Update response")
}
defer res.Body.Close()
fmt.Println(res.String())
}

UpdateByQuery 通过匹配条件更新文档

func UpdateByQuery() {
addresses := []string{"http://127.0.0.1:9200", "http://127.0.0.1:9201"}
config := elasticsearch.Config{
Addresses: addresses,
Username: "",
Password: "",
CloudID: "",
APIKey: "",
}
// new client
es, err := elasticsearch.NewClient(config)
failOnError(err, "Error creating the client")
// UpdateByQuery performs an update on every document in the index without changing the source,
// for example to pick up a mapping change.
index := []string{"demo"}
var buf bytes.Buffer
doc := map[string]interface{}{
"query": map[string]interface{}{
"match": map[string]interface{}{
"title": "外面",
},
},
// 根据搜索条件更新title
/*
"script": map[string]interface{}{
"source": "ctx._source['title']='更新你看到外面的世界是什么样的?'",
},
*/
// 根据搜索条件更新title、content
/*
"script": map[string]interface{}{
"source": "ctx._source=params",
"params": map[string]interface{}{
"title": "外面的世界真的很精彩",
"content": "你看到外面的世界是什么样的?",
},
"lang": "painless",
},
*/
// 根据搜索条件更新title、content
"script": map[string]interface{}{
"source": "ctx._source.title=params.title;ctx._source.content=params.content;",
"params": map[string]interface{}{
"title": "看看外面的世界真的很精彩",
"content": "他们和你看到外面的世界是什么样的?",
},
"lang": "painless",
},
}
if err := json.NewEncoder(&buf).Encode(doc); err != nil {
failOnError(err, "Error encoding doc")
}
res, err := es.UpdateByQuery(
index,
es.UpdateByQuery.WithDocumentType("doc"),
es.UpdateByQuery.WithBody(&buf),
es.UpdateByQuery.WithContext(context.Background()),
es.UpdateByQuery.WithPretty(),
)
if err != nil {
failOnError(err, "Error Update response")
}
defer res.Body.Close()
fmt.Println(res.String())
}

本文来自:简书

感谢作者:是个懒人






总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1