<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Elasticsearch(ES)是一個基於Lucene構建的開源、分散式、RESTful介面的全文搜尋引擎。Elasticsearch還是一個分散式檔案資料庫,其中每個欄位均可被索引,而且每個欄位的資料均可被搜尋,ES能夠橫向擴充套件至數以百計的伺服器儲存以及處理PB級的資料。可以在極短的時間記憶體儲、搜尋和分析大量的資料。通常作為具有複雜搜尋場景情況下的核心發動機。
go get github.com/olivere/elastic
elastic.SetSniff(false)
client, _ := elastic.NewClient( // ... // 將sniff設定為false後,便不會自動轉換地址 elastic.SetSniff(false), )
var client *elastic.Client var 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 %sn", 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) } //列印查詢的employee func 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("%#vn", 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:%sn", 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) } //列印查詢的employee func 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("%#vn", 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-102 node.name : node-103 network.host: 192.168.1.102 network.host: 192.168.1.103 discovery.zen.ping.unicast.hosts: ["s201","s202","s203"]
到此這篇關於go語言操作es的實現範例的文章就介紹到這了,更多相關go語言操作es內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45