golang elasticsearch Client的使用

elasticsearch 的client ,通过 NewClient 建立连接,通过  NewClient 中的 Set.URL设置访问的地址,SetSniff设置集群

获得连接 后,通过 Index 方法插入数据,插入后可以通过 Get 方法获得数据(最后的测试用例中会使用 elasticsearch client 的Get 方法)

func Save(item interface{}) {
    client, err := elastic.NewClient(
		elastic.SetURL("http://192.168.174.128:9200/"),
		// Must turn off sniff in docker
		elastic.SetSniff(false),
	)

	if err != nil {
		panic(err)
	}

	resp, err := client.Index().
		Index("dating_profile").
		Type("zhenai").
		BodyJson(item).
		Do(context.Background()) //contex需要context 包
	if err != nil {
		panic(err)
	}

	fmt.Printf("%+v", resp)

}

测试程序,自行定义一个数据结构 Profile 进行测试

func TestSave(t *testing.T) {
	profile := model.Profile{
		Age:        34,
		Height:     162,
		Weight:     57,
		Income:     "3001-5000元",
		Gender:     "女",
		Name:       "安静的雪",
		XingZuo:    "牡羊座",
		Occupation: "人事/行政",
		Marriage:   "离异",
		House:      "已购房",
		Hukou:      "山东菏泽",
		Education:  "大学本科",
		Car:        "未购车",
	}

	Save(profile)
}

go test 成功

通过 Get 方法查看数据是否存在elasticsearch 中

 

我们在test中panic,在函数中讲错误返回。在从elastisearch中 取出存入的数据,与我们定义的数据进行比较,所以save中需要将插入数据的Id返回出来

func Save(item interface{}) (id string, err error) {
	client, err := elastic.NewClient(
		elastic.SetURL("http://192.168.174.128:9200/"),
		// Must turn off sniff in docker
		elastic.SetSniff(false),
	)

	if err != nil {
		return "", err
	}

	resp, err := client.Index().
		Index("dating_profile").
		Type("zhenai").
		BodyJson(item).
		Do(context.Background())
	if err != nil {
		return "", err
	}

	return resp.Id, nil

}

测试用例

package persist

import (
	"context"
	"encoding/json"
	"my_crawler_single/model"
	"testing"

	elastic "gopkg.in/olivere/elastic.v5"
)

func TestSave(t *testing.T) {
	expected := model.Profile{
		Age:        34,
		Height:     162,
		Weight:     57,
		Income:     "3001-5000元",
		Gender:     "女",
		Name:       "安静的雪",
		XingZuo:    "牡羊座",
		Occupation: "人事/行政",
		Marriage:   "离异",
		House:      "已购房",
		Hukou:      "山东菏泽",
		Education:  "大学本科",
		Car:        "未购车",
	}

	id, err := Save(expected)
	if err != nil {
		panic(err)
	}

	client, err := elastic.NewClient(
		elastic.SetURL("http://192.168.174.128:9200/"),
		elastic.SetSniff(false),
	)
	if err != nil {
		panic(err)
	}

	resp, err := client.Get().
		Index("dating_profile").
		Type("zhenai").
		Id(id). //查找指定id的那一条数据
		Do(context.Background())
	if err != nil {
		panic(err)
	}

	t.Logf("%+v", resp)
	//从打印得知,数据在resp.Source中,从rest client的截图也可以知道

	var actual model.Profile
	//查看 *resp.Source 可知其数据类型为[]byte
	err = json.Unmarshal(*resp.Source, &actual)
	if err != nil {
		panic(err)
	}

	if actual != expected {
		t.Errorf("got %v;expected %v", actual, expected)
	}
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Minio Golang客户端可以帮助您在Go应用程序中使用Minio对象存储服务。以下是使用Minio Golang客户端的步骤: 1. 安装Minio Golang客户端包 ```go go get github.com/minio/minio-go/v7 ``` 2. 初始化Minio Golang客户端 ```go package main import ( "context" "fmt" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) func main() { // 初始化Minio客户端对象 minioClient, err := minio.New("play.min.io", &minio.Options{ Creds: credentials.NewStaticV4("Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG", ""), Secure: true, }) if err != nil { fmt.Println(err) return } // 使用minioClient操作对象存储服务 ... } ``` 3. 创建一个存储桶 ```go // 创建一个名为"test-bucket"的存储桶 err = minioClient.MakeBucket(context.Background(), "test-bucket", minio.MakeBucketOptions{}) if err != nil { fmt.Println(err) return } ``` 4. 上传文件到存储桶 ```go // 上传名为"test-object"的文件到存储桶 _, err = minioClient.FPutObject(context.Background(), "test-bucket", "test-object", "testfile.txt", minio.PutObjectOptions{}) if err != nil { fmt.Println(err) return } ``` 5. 下载存储桶中的文件 ```go // 下载名为"test-object"的文件到本地文件system err = minioClient.FGetObject(context.Background(), "test-bucket", "test-object", "/path/to/destination", minio.GetObjectOptions{}) if err != nil { fmt.Println(err) return } ``` 6. 列出存储桶中的所有对象 ```go objectsCh := make(chan minio.ObjectInfo) // 列出名为"test-bucket"的存储桶中的所有对象 go func() { defer close(objectsCh) for object := range minioClient.ListObjects(context.Background(), "test-bucket", minio.ListObjectsOptions{ Recursive: true, }) { if object.Err != nil { fmt.Println(object.Err) return } objectsCh <- object } }() for object := range objectsCh { fmt.Println(object.Key) } ``` 以上是使用Minio Golang客户端的基本步骤,您可以根据自己的实际需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值