文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

go语言操作es的方法

2023-06-30 06:35

关注

这篇文章主要介绍“go语言操作es的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言操作es的方法”文章能帮助大家解决问题。

Elasticsearch

介绍

Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。

Elasticsearch能做什么

go语言操作es

go get github.com/olivere/elastic

解决golang使用elastic连接elasticsearch时自动转换连接地址

go语言操作es的方法

elastic.SetSniff(false)
client, _ := elastic.NewClient(  // ...  // 将sniff设置为false后,便不会自动转换地址   elastic.SetSniff(false),)

go语言操作es的方法

初始化

var client *elastic.Clientvar host = "http://xxx:9200"//初始化es驱动func init() {   errorlog := log.New(os.Stdout, "app", log.LstdFlags)   var err error   client, err = elastic.NewClient(elastic.SetErrorLog(errorlog), elastic.SetURL(host), elastic.SetSniff(false))   if err != nil {      panic(err)   }   info, code, err := client.Ping(host).Do(context.Background())   if err != nil {      panic(err)   }   fmt.Printf("Es return with code %d and version %s \n", code, info.Version.Number)   esversionCode, err := client.ElasticsearchVersion(host)   if err != nil {      panic(err)   }   fmt.Printf("es version %s\n", esversionCode)}

数据创建

info —>employee -------FirstName,LastName,Age,About,Interests

结构体方式

type Employee struct {FirstName string `json:"firstname"`LastName string `json:"lastname"`Age int `json:"age"`About string `json:"about"`Interests []string `json:"interests"`}//创建索引func create() {//1.使用结构体方式存入到es里面e1 := Employee{"jane", "Smith", 20, "I like music", []string{"music"}}put, err := client.Index().Index("info").Type("employee").Id("1").BodyJson(e1).Do(context.Background())if err != nil {panic(err)}fmt.Printf("indexed %d to index %s, type %s \n", put.Id, put.Index, put.Type)}func main() {create()}

字符串方式:

func create1() {   //使用字符串   e1 := `{"firstname":"john","lastname":"smith","age":22,"about":"i like book","interests":["book","music"]}`   put, err := client.Index().Index("info").Type("employee").Id("2").BodyJson(e1).Do(context.Background())   if err != nil {      panic(err)   }   fmt.Printf("indexed %d to index %s, type %s \n", put.Id, put.Index, put.Type)}

查找

//查找func get() {   get, err := client.Get().Index("info").Type("employee").Id("1").Do(context.Background())   if err != nil {      panic(err)   }   if get.Found {      fmt.Printf("got document %s in version %d from index %s,type %s \n", get.Id, get.Version, get.Index, get.Type)   }}func main() {   get()}

修改

func update() {   res, err := client.Update().Index("info").Type("employee").Id("1").Doc(map[string]interface{}{"age": 88}).Do(context.Background())   if err != nil {      fmt.Println(err.Error())   }   fmt.Printf("update age %s \n", res.Result)}func main() {   update()}

删除

//删除func delete() {   res, err := client.Delete().Index("info").Type("employee").Id("1").Do(context.Background())   if err != nil {      fmt.Println(err.Error())   }   fmt.Printf("delete result %s", res.Result)}func main() {   delete()}

查找

func query() {   var res *elastic.SearchResult   var err error   res, err = client.Search("info").Type("employee").Do(context.Background())   printEmployee(res, err)}//打印查询的employeefunc printEmployee(res *elastic.SearchResult, err error) {   if err != nil {      fmt.Print(err.Error())      return   }   var typ Employee   for _, item := range res.Each(reflect.TypeOf(typ)) {      t := item.(Employee)      fmt.Printf("%#v\n", t)   }}//条件查找func query1() {   var res *elastic.SearchResult   var err error   //查找方式一:   q := elastic.NewQueryStringQuery("lastname:smith")   res, err = client.Search("info").Type("employee").Query(q).Do(context.Background())   printEmployee(res, err)   //查找方法二:   if res.Hits.TotalHits > 0 {      fmt.Printf("found a total fo %d Employee", res.Hits.TotalHits)      for _, hit := range res.Hits.Hits {         var t Employee         err := json.Unmarshal(*hit.Source, &t) //另一种取出的方法         if err != nil {            fmt.Println("failed")         }         fmt.Printf("employee name %s:%s\n", t.FirstName, t.LastName)      }   } else {      fmt.Printf("found no employee \n")   }}

年龄大于21的查找

//年龄大于21的func query3() {var res *elastic.SearchResultvar err errorboolq := elastic.NewBoolQuery()boolq.Must(elastic.NewMatchQuery("lastname", "smith"))boolq.Filter(elastic.NewRangeQuery("age").Gt(21))res, err = client.Search("info").Type("employee").Query(boolq).Do(context.Background())printEmployee(res, err)}//打印查询的employeefunc printEmployee(res *elastic.SearchResult, err error) {   if err != nil {      fmt.Print(err.Error())      return   }   var typ Employee   for _, item := range res.Each(reflect.TypeOf(typ)) {      t := item.(Employee)      fmt.Printf("%#v\n", t)   }}

包含book的

//包含book的func query4() {   var res *elastic.SearchResult   var err error   matchPhrase := elastic.NewMatchPhraseQuery("about", "book")   res, err = client.Search("info").Type("employee").Query(matchPhrase).Do(context.Background())   printEmployee(res, err)}

分页

//分页func list(size, page int) {   var res *elastic.SearchResult   var err error   if size < 0 || page < 1 {      fmt.Printf("param error")      return   }   res, err = client.Search("info").Type("employee").Size(size).From((page - 1) * size).Do(context.Background())   printEmployee(res, err)}

集群搭建

配置文件修改

node.name : node-102node.name : node-103network.host: 192.168.1.102network.host: 192.168.1.103discovery.zen.ping.unicast.hosts: ["s201","s202","s203"]

go语言操作es的方法

go语言操作es的方法

关于“go语言操作es的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯