GO語(yǔ)言操作Elasticsearch示例分享
Elasticsearch簡(jiǎn)介
Elasticsearch 是一個(gè)開(kāi)源的搜索引擎,建立在一個(gè)全文搜索引擎庫(kù) Apache Lucene™ 基礎(chǔ)之上。 Lucene 可以說(shuō)是當(dāng)下最先進(jìn)、高性能、全功能的搜索引擎庫(kù)–無(wú)論是開(kāi)源還是私有。
連接Elasticsearch
// 引入g~ ~~~~~-elasticsearch import ( es8 "github.com/elastic/go-elasticsearch/v8" ) // go-es配置 conf := es8.Config{ Addresses: "http://127.0.0.1:9200", Username:"elastic", Password:"jloMQ7ZCTlcZUr_hmDoB", } // 創(chuàng)建 client, err := es8.NewClient(conf); if err != nil{ fmt.Println("============= 創(chuàng)建 elasticsearch 失敗 =============") return } // 連接 _, err1 := client.Info() if err1 != nil{ fmt.Println("============= 連接 elasticsearch 失敗 =============") return }
創(chuàng)建索引
創(chuàng)建model結(jié)構(gòu)體
type Admin struct{ Id int `gorm:"<-" json:"id"` UserName string `gorm:"<-" json:"user_name"` RealName string `gorm:"<-" json:"real_name"` Mobile string `gorm:"<-" json:"mobile"` }
初始化model
admin := Admin{ Id: 1, UserName: "test", RealName: "測(cè)試", Mobile: "15222222222", }
創(chuàng)建索引
// 結(jié)構(gòu)體json序列化 str,err := json.Marshal(admin); if err != nil{ return ; } // 創(chuàng)建索引 res1, err1 := client.Index( "db.table", bytes.NewReader(str), client.Index.WithDocumentID("1"), // 索引ID client.Index.WithRefresh("true") //是否立即創(chuàng)建 );
搜索數(shù)據(jù)
創(chuàng)建返回結(jié)構(gòu)體
type EsResponse struct{ Hits struct{ Total struct{ Value int `json:"value"` } `json:"total"` Hits []struct{ Index string `json:"_index"` Id string `json:"_id"` Score float32 `json:"_score"` Source map[string]any `json:"_source"` } `json:"hits"` } `json:"hits"` } type EsData struct{ Total int `json:"total"` List []map[string]any `json:"list"` }
搜索數(shù)據(jù)
query := map[string]any{ "query":map[string]any{ "bool":map[string]any{ "must":[]map[string]any{ map[string]any{ "match_phrase":map[string]any{ "user_name": "test", }, }, map[string]any{ "match_phrase":map[string]any{ "mobile": "15222222222", }, }, }, }, }, } str,err := json.Marshal(query); if err != nil{ return ; } res1,err1 := client.Search(client.Search.WithBody(bytes.NewReader(str))); if err1 != nil{ return ; }
解析數(shù)據(jù)
var resData EsResponse; err2 := json.NewDecoder(res1.Body).Decode(&resData); if err2 != nil{ return ; } var esData EsData; esData.Total = resData.Hits.Total.Value; for _, v := range resData.Hits.Hits { cache := v.Source cache["_index"] = v.Index; cache["_id"] = v.Id; cache["_score"] = v.Score; esData.List = append(esData.List,cache) }
修改數(shù)據(jù)
單條修改
update := map[string]any{ "script": map[string]any{ "source":"ctx._source.user_name='test1';ctx._source.mobile='15211111111';", "lang": "painless", }, } str,err1 := json.Marshal(update) if err1 != nil{ return ; } res2,err2 := client.Update( "db.table", "1", bytes.NewReader(str), client.Update.WithRefresh("true") ) if err2 != nil{ return ; }
批量修改
update := map[string]any{ "query":map[string]any{ "bool":map[string]any{ "must":[]map[string]any{ map[string]any{ "match_phrase":map[string]any{ "user_name": "test", }, }, map[string]any{ "match_phrase":map[string]any{ "mobile": "15222222222", }, }, }, }, }, "script": map[string]any{ "source":"ctx._source.user_name='test1';ctx._source.mobile='15211111111';", "lang": "painless", }, } str,err1 := json.Marshal(update) if err1 != nil{ return ; } res2,err2 := client.UpdateByQuery( []string{ "db.table", }, client.UpdateByQuery.WithBody(bytes.NewReader(str)), client.UpdateByQuery.WithRefresh(true) ) if err2 != nil{ return ; }
刪除數(shù)據(jù)
單條刪除
res,err := client.Delete( "db.table", "1", client.Delete.WithRefresh("true") ) if err != nil{ return ; }
批量刪除
query := map[string]any{ "query":map[string]any{ "bool":map[string]any{ "must":[]map[string]any{ map[string]any{ "match_phrase":map[string]any{ "user_name": "test", }, }, map[string]any{ "match_phrase":map[string]any{ "mobile": "15222222222", }, }, }, }, }, } str,err := json.Marshal(query); if err != nil{ return ; } res,err := client.DeleteByQuery( []string{ "db.table", }, bytes.NewReader(str), client.DeleteByQuery.WithRefresh(true) )
到此這篇關(guān)于GO語(yǔ)言操作Elasticsearch示例分享的文章就介紹到這了,更多相關(guān)GO語(yǔ)言操作Elasticsearch內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- golang操作elasticsearch的實(shí)現(xiàn)
- Django利用elasticsearch(搜索引擎)實(shí)現(xiàn)搜索功能
- django使用haystack調(diào)用Elasticsearch實(shí)現(xiàn)索引搜索
- Django項(xiàng)目之Elasticsearch搜索引擎的實(shí)例
- 在Django中使用ElasticSearch
- go語(yǔ)言實(shí)現(xiàn)Elasticsearches批量修改查詢及發(fā)送MQ操作示例
- Django對(duì)接elasticsearch實(shí)現(xiàn)全文檢索的示例代碼
- Go語(yǔ)言Elasticsearch數(shù)據(jù)清理工具思路詳解
相關(guān)文章
聊聊Golang的語(yǔ)言結(jié)構(gòu)和變量問(wèn)題
這篇文章主要介紹了Golang的語(yǔ)言結(jié)構(gòu)和變量問(wèn)題,在golang中定義變量的一般形式是使用 var 關(guān)鍵字,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-11-11使用gopkg.in/yaml.v3?解析YAML數(shù)據(jù)詳解
這篇文章主要為大家介紹了使用gopkg.in/yaml.v3?解析YAML數(shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09go?打包運(yùn)行文件在windows,liunx運(yùn)行
這篇文章主要介紹了go?打包運(yùn)行文件在windows,liunx運(yùn)行的相關(guān)資料,需要的朋友可以參考下2023-11-11Golang項(xiàng)目在github創(chuàng)建release后自動(dòng)生成二進(jìn)制文件的方法
這篇文章主要介紹了Golang項(xiàng)目在github創(chuàng)建release后如何自動(dòng)生成二進(jìn)制文件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03golang微服務(wù)框架kratos實(shí)現(xiàn)Socket.IO服務(wù)的方法
本文主要介紹了golang微服務(wù)框架kratos實(shí)現(xiàn)Socket.IO服務(wù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06go語(yǔ)言題解LeetCode1128等價(jià)多米諾骨牌對(duì)的數(shù)量
這篇文章主要為大家介紹了go語(yǔ)言題解LeetCode1128等價(jià)多米諾骨牌對(duì)的數(shù)量示例詳解,2022-12-12