激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - golang操作elasticsearch的實現

golang操作elasticsearch的實現

2020-07-20 11:33guyan0319 Golang

這篇文章主要介紹了golang操作elasticsearch,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1、前提

1.1 docker 安裝elasticsearch

查詢elasticsearch 版本

?
1
docker search elasticsearch

將對應的版本拉到本地

?
1
docker.elastic.co/elasticsearch/elasticsearch:7.3.0

創建一個網絡

?
1
docker network create esnet

啟動容器

?
1
docker run --name es -p 9200:9200 -p 9300:9300 --network esnet -e "discovery.type=single-node" bdaab402b220

1.2這里過后就可以去寫go代碼 為了直觀搞了個可視化工具 ElisticHD 這里使用docker 部署

?
1
docker run -p 9800:9800 -d --link es:demo --network esnet -e "discovery.type=single-node" containerize/elastichd

可以試一下界面還是很美觀的

golang操作elasticsearch的實現

2、golang 實現elasticsearch 簡單的增刪改查

直接上代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
package main
 
import (
  "context"
  "encoding/json"
  "fmt"
  "github.com/olivere/elastic/v7"
  "reflect"
)
 
var client *elastic.Client
var host = "http://ip:port"
 
type Employee struct {
  FirstName string  `json:"first_name"`
  LastName string  `json:"last_name"`
  Age    int   `json:"age"`
  About   string  `json:"about"`
  Interests []string `json:"interests"`
}
 
//初始化
func init() {
  //errorlog := log.New(os.Stdout, "APP", log.LstdFlags)
  var err error
      //這個地方有個小坑 不加上elastic.SetSniff(false) 會連接不上
  client, err = elastic.NewClient(elastic.SetSniff(false), elastic.SetURL(host))
  if err != nil {
    panic(err)
  }
  _,_,err = client.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)
 
  _,err = client.ElasticsearchVersion(host)
  if err != nil {
    panic(err)
  }
  //fmt.Printf("Elasticsearch version %s\n", esversion)
 
}
 
/*下面是簡單的CURD*/
 
//創建
func create() {
 
  //使用結構體
  e1 := Employee{"Jane", "Smith", 32, "I like to collect rock albums", []string{"music"}}
  put1, err := client.Index().
    Index("megacorp").
    Type("employee").
    Id("1").
    BodyJson(e1).
    Do(context.Background())
  if err != nil {
    panic(err)
  }
  fmt.Printf("Indexed tweet %s to index s%s, type %s\n", put1.Id, put1.Index, put1.Type)
 
  //使用字符串
  e2 := `{"first_name":"John","last_name":"Smith","age":25,"about":"I love to go rock climbing","interests":["sports","music"]}`
  put2, err := client.Index().
    Index("megacorp").
    Type("employee").
    Id("2").
    BodyJson(e2).
    Do(context.Background())
  if err != nil {
    panic(err)
  }
  fmt.Printf("Indexed tweet %s to index s%s, type %s\n", put2.Id, put2.Index, put2.Type)
 
  e3 := `{"first_name":"Douglas","last_name":"Fir","age":35,"about":"I like to build cabinets","interests":["forestry"]}`
  put3, err := client.Index().
    Index("megacorp").
    Type("employee").
    Id("3").
    BodyJson(e3).
    Do(context.Background())
  if err != nil {
    panic(err)
  }
  fmt.Printf("Indexed tweet %s to index s%s, type %s\n", put3.Id, put3.Index, put3.Type)
 
}
 
 
//查找
func gets() {
  //通過id查找
  get1, err := client.Get().Index("megacorp").Type("employee").Id("2").Do(context.Background())
  if err != nil {
    panic(err)
  }
  if get1.Found {
    fmt.Printf("Got document %s in version %d from index %s, type %s\n", get1.Id, get1.Version, get1.Index, get1.Type)
    var bb Employee
    err:=json.Unmarshal(get1.Source,&bb)
    if err!=nil{
      fmt.Println(err)
    }
    fmt.Println(bb.FirstName)
    fmt.Println(string(get1.Source))
  }
 
}
//
//刪除
func delete() {
 
  res, err := client.Delete().Index("megacorp").
    Type("employee").
    Id("1").
    Do(context.Background())
  if err != nil {
    println(err.Error())
    return
  }
  fmt.Printf("delete result %s\n", res.Result)
}
//
//修改
func update() {
  res, err := client.Update().
    Index("megacorp").
    Type("employee").
    Id("2").
    Doc(map[string]interface{}{"age": 88}).
    Do(context.Background())
  if err != nil {
    println(err.Error())
  }
  fmt.Printf("update age %s\n", res.Result)
 
}
//
////搜索
func query() {
  var res *elastic.SearchResult
  var err error
  //取所有
  res, err = client.Search("megacorp").Type("employee").Do(context.Background())
  printEmployee(res, err)
 
  //字段相等
  q := elastic.NewQueryStringQuery("last_name:Smith")
  res, err = client.Search("megacorp").Type("employee").Query(q).Do(context.Background())
  if err != nil {
    println(err.Error())
  }
  printEmployee(res, err)
 
 
 
  //條件查詢
  //年齡大于30歲的
  boolQ := elastic.NewBoolQuery()
  boolQ.Must(elastic.NewMatchQuery("last_name", "smith"))
  boolQ.Filter(elastic.NewRangeQuery("age").Gt(30))
  res, err = client.Search("megacorp").Type("employee").Query(q).Do(context.Background())
  printEmployee(res, err)
 
  //短語搜索 搜索about字段中有 rock climbing
  matchPhraseQuery := elastic.NewMatchPhraseQuery("about", "rock climbing")
  res, err = client.Search("megacorp").Type("employee").Query(matchPhraseQuery).Do(context.Background())
  printEmployee(res, err)
 
  //分析 interests
  aggs := elastic.NewTermsAggregation().Field("interests")
  res, err = client.Search("megacorp").Type("employee").Aggregation("all_interests", aggs).Do(context.Background())
  printEmployee(res, err)
 
}
//
////簡單分頁
func list(size,page int) {
  if size < 0 || page < 1 {
    fmt.Printf("param error")
    return
  }
  res,err := client.Search("megacorp").
    Type("employee").
    Size(size).
    From((page-1)*size).
    Do(context.Background())
  printEmployee(res, err)
 
}
//
//打印查詢到的Employee
func printEmployee(res *elastic.SearchResult, err error) {
  if err != nil {
    print(err.Error())
    return
  }
  var typ Employee
  for _, item := range res.Each(reflect.TypeOf(typ)) { //從搜索結果中取數據的方法
    t := item.(Employee)
    fmt.Printf("%#v\n", t)
  }
}
 
func main() {
  create()
  delete()
  update()
  gets()
  query()
  list(2,1)
}

有一個小坑要注意在代碼中已經注釋了,如果沒有添加就會有下面錯誤

no active connection found: no Elasticsearch node available

解決

Docker No Elastic Node Aviable

關閉sniff模式;或者設置es的地址為 publish_address 地址

代碼設置 sniff 為false

到此這篇關于golang 操作 elasticsearch的實現的文章就介紹到這了,更多相關golang操作elasticsearch內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.jianshu.com/p/e3e40af0dba7

延伸 · 閱讀

精彩推薦
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
主站蜘蛛池模板: 成人羞羞视频在线观看免费 | 国产一区影院 | 国产亚洲欧美在线视频 | 日本aaaa片毛片免费观看视频 | 欧美性受xxxx人人本视频 | 欧美精品一区二区中文字幕 | www.99久 | 精品久久久久久国产三级 | 久久99精品久久久久久小说 | 男女污污视频网站 | 九九色精品| 色爽爽爽 | 一区在线免费视频 | 男女无套免费视频 | 在线免费观看毛片视频 | 日本精品久久久一区二区三区 | 久久精品视频国产 | 久草在线综合 | 成年人高清视频在线观看 | 91短视频在线观看 | 久久精品国产精品亚洲 | 久久久久久久久久久久久久久久久久 | 一级毛片免费的 | 叶子楣成人爽a毛片免费啪啪 | 双性精h调教灌尿打屁股的文案 | 视频在线中文字幕 | 男人午夜视频 | 久久久久亚洲视频 | 艹男人的日日夜夜 | 国产成年人小视频 | 成人毛片在线免费看 | 免费看一区二区三区 | 久久出精品 | 一级网站片 | 国产一级毛片高清视频完整版 | 日韩在线播放中文字幕 | 99精品欧美一区二区 | 中国老女人一级毛片视频 | 国产女厕一区二区三区在线视 | 久久国产精品系列 | 性欧美一区二区三区 |