千家信息网

go语言操作es的方法

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"go语言操作es的方法"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"go语言操作es的方法"文章能帮助大家解决问题。Elasticsearc
千家信息网最后更新 2026年11月01日go语言操作es的方法

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

    Elasticsearch

    介绍

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

    Elasticsearch能做什么

    • 当你经营一家网上商店,你可以让你的客户搜索你卖的商品。在这种情况下,你可以使用ElasticSearch来存储你的整个产品目录和库存信息,为客户提供精准搜索,可以为客户推荐相关商品。

    • 当你想收集日志或者交易数据的时候,需要分析和挖掘这些数据,寻找趋势,进行统计,总结,或发现异常。在这种情况下,你可以使用Logstash或者其他工具来进行收集数据,当这引起数据存储到ElasticsSearch中。你可以搜索和汇总这些数据,找到任何你感兴趣的信息。

    • 对于程序员来说,比较有名的案例是GitHub,GitHub的搜索是基于ElasticSearch构建的,在github.com/search页面,你可以搜索项目、用户、issue、pull request,还有代码。共有40~50个索引库,分别用于索引网站需要跟踪的各种数据。虽然只索引项目的主分支(master),但这个数据量依然巨大,包括20亿个索引文档,30TB的索引文件。

    go语言操作es

    go get github.com/olivere/elastic

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

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

    初始化

    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.SearchResult        var err error        boolq := 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的方法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

    数据 搜索 索引 方法 语言 方式 客户 情况 知识 存储 信息 分布式 商品 地址 字段 字符 字符串 年龄 文件 文档 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 瑰夏咖啡 广东万易互联网科技有限公司惠州分公司 互联网科技保险 科技互联网公司装修 无线互联网科技 无锡溥仪互联网科技有限公司 深圳前海聚择互联网科技有限公司 阿里巴巴算科技企业还是互联网 青岛科技大学互联网大赛研究生 洛阳昕诺飞互联网科技有限公司 互联网公司黑科技创始人 众安科技工业互联网合作 风投北京互联网科技 互联网高科技行业有哪些企业 科技互联网经济论坛 互联网科技博主张洲 杭州融税互联网科技有限公司 盐城市攀科互联网科技有限公司 伍佰万互联网科技是干嘛的 利用互联网等科技手段 互联网 卓越科技 嘟嘟瓜互联网科技 兼蜜互联网科技 卫星互联网科技股票 青岛中康互联网医疗科技有限公司 广西互联网科技孵化中心 威龙国际互联网科技公司 互联网科技圈年度人物 全球科技与互联网公司市值变化 唐山双旺合互联网科技产业园
    0