分享
  1. 首页
  2. 文章

关于 golang 中使用 ES

顶尖少爷 · · 14061 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

需要使用到的包

gopkg.in/olivere/elastic.v6
golang.org/x/elasti

创建一个接口

controllers/base.go

package controllers
import (
 "context"
 "fmt"
 "log"
 "os"
 "gopkg.in/olivere/elastic.v6"
)
var EsClient *elastic.Client
var host = "http://127.0.0.1:9200/"
func init(){
 //es 配置
 errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
 var err error
 EsClient, err =elastic.NewClient(elastic.SetErrorLog(errorlog), elastic.SetURL(host))
 if err != nil {
 panic(err)
 }
 info, code, err := EsClient.Ping(host).Do(context.Background())
 if err != nil {
 panic(err)
 }
 fmt.Printf("Elasticsearch returned with code %d and version %s\n", code, info.Version.Number)
 esversion, err := EsClient.ElasticsearchVersion(host)
 if err != nil {
 panic(err)
 }
 fmt.Printf("Elasticsearch version %s\n", esversion)
}

在其他接口上调用

controllers/question.go


import (
 "context"
 "encoding/json"
 "fmt"
 "github.com/astaxie/beego"
 "github.com/astaxie/beego/orm"
 "goGame/controllers"
 "golang.org/x/elastic"
 "zhihu/models"
)
//根据id查询
type ZhiHuGetWithIdController struct{
 beego.Controller
}
func (this *ZhiHuGetWithIdController) Get(){
 get ,err:= EsClient.Get().Index("elas_ar_zhihu_article").Type("elas_ar_zhihu_article_type").Id("1").Do(context.Background())
 if err != nil {
 panic(err)
 }
 if get.Found {
 this.Data["json"] = get.Source
 this.ServeJSON()
 }
}
//根据条件查询query
type ZhiHuSearchController struct {
 beego.Controller
}
//查询 es查询
type EsItem struct {
 Id int `json:"id"`
 OrContent string `json:"or_content"`
 ArContent string `json:"ar_content"`
}
type EsData struct {
 Total int64 `json:"total"`
 Items interface{} `json:"items"`
}
type EsResult struct {
 Status string `json:"status"`
 Data EsData `json:"data"`
}
func (this *ZhiHuSearchController) Get(){
 var q ,query elastic.Query
 or_value := this.GetString("or_content")
 if or_value!=""{
 query = elastic.NewMatchPhraseQuery("or_content",or_value)
 }
 ar_value := this.GetString("ar_content")
 if ar_value !=""{
 q =elastic.NewMatchPhraseQuery("ar_content",ar_value)
 }
 res ,err:= EsClient.Search().Index("elas_ar_zhihu_article").Type("elas_ar_zhihu_article_type").Query(query).Query(q).Do(context.Background())
 if err !=nil{
 println(err.Error())
 }
 var data EsData
 if res.Hits.TotalHits>0{
 var items []interface{}
 data.Total = res.Hits.TotalHits
 for _,hit :=range res.Hits.Hits{
 var item EsItem
 err := json.Unmarshal(*hit.Source, &item) //另外一种取数据的方法
 if err !=nil{
 fmt.Print(err.Error())
 }
 items = append(items,item)
 }
 data.Items = items
 }
 var result EsResult
 result.Status = "success"
 result.Data = data
 this.Data["json"] = result
 this.ServeJSON()
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:顶尖少爷

查看原文:关于 golang 中使用 ES

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
14061 次点击
1 回复 | 直到 2025年05月02日 09:17:18
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏