范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

go操作elasticsearch示例

  这里我使用elasticsearch官方给的go语言包(go-elasticsearch)
  go-elasticsearch向前兼容,这意味着客户端支持与更大或同等次要版本的 Elasticsearch 通信。Elasticsearch 语言客户端仅向后兼容默认发行版,不提供任何保证。 包:https://github.com/elastic/go... Elasticsearch 权威指南:https://www.elastic.co/guide/... 环境介绍:版本 Elasticsearch:v7.15  安装
  go.mod 文件中添加 require github.com/elastic/go-elasticsearch/v8 main
  或者 git clone --branch main https://github.com/elastic/go-elasticsearch.git $GOPATH/src/github.com/elastic/go-elasticsearch示例:
  新建 es.go 存入 es目录 package es  import (     "bytes"     "context"     "encoding/json"     "fmt"     "github.com/elastic/go-elasticsearch/v8"     "github.com/elastic/go-elasticsearch/v8/esapi"     "log"     "net/http" )  var EsClient *elasticsearch.Client  func init() {      cfg := elasticsearch.Config{          Addresses: []string{             "http://localhost:9200",             },     }     var err error     EsClient, err = elasticsearch.NewClient(cfg)     if err != nil {         log.Fatalln("Failed to connect to es")     } } func failOnError(err error, msg string) {     if err != nil {         log.Fatalf("%s: %s", msg, err)     } }  // idx 为空,默认随机唯一字符串 func Index(index, idx string, doc map[string]interface{}) {     //index:="my_index_name_v1"     res, err := EsClient.Info()     fmt.Println(res, err)     if err != nil {         log.Fatalf("Error getting response: %s", err)     }     var buf bytes.Buffer     //doc := map[string]interface{}{     //    "title":   "中国",     //    "content": "中国早日统一台湾",     //    "time":    time.Now().Unix(),     //    "date":    time.Now(),     //}     if err = json.NewEncoder(&buf).Encode(doc); err != nil {         fmt.Println(err, "Error encoding doc")         return     }     res, err = EsClient.Index(         index,                              // Index name         &buf,                               // Document body         EsClient.Index.WithDocumentID(idx), // Document ID         // Document ID         EsClient.Index.WithRefresh("true"), // Refresh     )     //res, err = EsClient.Create(index, idx, &buf)     if err != nil {         fmt.Println(err, "Error create response")     }     defer res.Body.Close()     fmt.Println(res.String())     log.Println(res) }  //struct 类型允许使用更实际的方法,您可以在其中创建一个新结构,将请求配置作为字段,并使用上下文和客户端作为参数调用 Do() 方法: func IndexEspi(index, idx string, doc map[string]interface{}) {     //index:="my_index_name_v1"     res, err := EsClient.Info()     fmt.Println(res, err)     if err != nil {         log.Fatalf("Error getting response: %s", err)     }     var buf bytes.Buffer     //doc := map[string]interface{}{     //    "title":   "中国",     //    "content": "中国早日统一台湾",     //    "time":    time.Now().Unix(),     //    "date":    time.Now(),     //}     if err = json.NewEncoder(&buf).Encode(doc); err != nil {         fmt.Println(err, "Error encoding doc")         return     }      req := esapi.IndexRequest{         Index:      index,  // Index name         Body:       &buf,   // Document body         DocumentID: idx,    // Document ID         Refresh:    "true", // Refresh     }      res, err = req.Do(context.Background(), EsClient)     if err != nil {         log.Fatalf("Error getting response: %s", err)     }     defer res.Body.Close()     fmt.Println(res.String())     log.Println(res) } func Search(index string, query map[string]interface{}) {     res, err := EsClient.Info()     if err != nil {         fmt.Println(err, "Error getting response")     }     //fmt.Println(res.String())     // search - highlight     var buf bytes.Buffer     //query := map[string]interface{}{     //    "query": map[string]interface{}{     //        "match": map[string]interface{}{     //            "title": title,     //        },     //    },     //    "highlight": map[string]interface{}{     //        "pre_tags":  []string{""},     //        "post_tags": []string{""},     //        "fields": map[string]interface{}{     //            "title": map[string]interface{}{},     //        },     //    },     //}     if err := json.NewEncoder(&buf).Encode(query); err != nil {         fmt.Println(err, "Error encoding query")     }     // Perform the search request.     res, err = EsClient.Search(         EsClient.Search.WithContext(context.Background()),         EsClient.Search.WithIndex(index),         EsClient.Search.WithBody(&buf),         EsClient.Search.WithTrackTotalHits(true),         EsClient.Search.WithFrom(0),         EsClient.Search.WithSize(10),         EsClient.Search.WithSort("time:desc"),         EsClient.Search.WithPretty(),     )     if err != nil {         fmt.Println(err, "Error getting response")     }     defer res.Body.Close()     fmt.Println(res.String()) }  //删除 index 根据 索引名 id  func Delete(index, idx string) {     //index:="my_index_name_v1"     res, err := EsClient.Info()     fmt.Println(res, err)     if err != nil {         log.Fatalf("Error getting response: %s", err)     }     res, err = EsClient.Delete(         index, // Index name         idx,   // Document ID         EsClient.Delete.WithRefresh("true"),     )     if err != nil {         fmt.Println(err, "Error create response")     }     defer res.Body.Close()     fmt.Println(res.String())     log.Println(res) } func DeleteByQuery(index []string, query map[string]interface{}) {     res, err := EsClient.Info()     if err != nil {         fmt.Println(err, "Error getting response")     }     //fmt.Println(res.String())     // search - highlight     var buf bytes.Buffer     //query := map[string]interface{}{     //    "query": map[string]interface{}{     //        "match": map[string]interface{}{     //            "title": title,     //        },     //    },     //    },     //}     if err := json.NewEncoder(&buf).Encode(query); err != nil {         fmt.Println(err, "Error encoding query")     }     // Perform the search request.     res, err = EsClient.DeleteByQuery(         index,         &buf,     )     if err != nil {         fmt.Println(err, "Error getting response")     }     defer res.Body.Close()     fmt.Println(res.String())  } func SearchEsapiSql(query map[string]interface{}) {     jsonBody, _ := json.Marshal(query)     req := esapi.SQLQueryRequest{Body: bytes.NewReader(jsonBody)}     res, _ := req.Do(context.Background(), EsClient)     defer res.Body.Close()     fmt.Println(res.String()) } func SearchHttp(method, url string, query map[string]interface{}) {     jsonBody, _ := json.Marshal(query)     req, _ := http.NewRequest(method, url, bytes.NewReader(jsonBody))     req.Header.Add("Content-type", "application/json")     res, err := EsClient.Perform(req)     if err != nil {         return     }     defer res.Body.Close()     buf := new(bytes.Buffer)     buf.ReadFrom(res.Body)     fmt.Println(buf.String()) }
  新建 main.go package main import "demo/es" func main() {     index := "my_index_name_v4"     //创建索引并设置映射     //query := map[string]interface{}{     //    "mappings": map[string]interface{}{     //        "properties": map[string]interface{}{     //            "title": map[string]interface{}{     //                "type": "text",     //            },     //            "content": map[string]interface{}{     //                "type": "text",     //            },     //            "location": map[string]interface{}{     //                "type": "geo_point",     //            },     //            "time": map[string]interface{}{     //                "type": "long",     //            },     //            "date": map[string]interface{}{     //                "type": "date",     //            },     //            "age": map[string]interface{}{     //                "type": "keyword",     //            },     //        },     //    },     //}     //url := index     //注意 映射信息不能更新     //es.SearchHttp("PUT", url, query)      //添加或修改文档,没有索引创建     //doc := map[string]interface{}{     //    "title":    "你好",     //    "content":  "中国美丽的城市",     //    "location": "41.015, -75.011",     //    "time":     time.Now().Unix(),     //    "date":     time.Now(),     //    "age":      20,     //}      //es.Index(index, "", doc)     //es.IndexEspi(index, "idx5", doc)     //删除索引     //es.Delete(index, "idx3")     //query := map[string]interface{}{     //    "query": map[string]interface{}{     //        "match": map[string]interface{}{     //            "title": "vvvvv我爱你!!!!",     //        },     //    },     //}     //indexArr := []string{index}     //es.DeleteByQuery(indexArr, query)     ////搜索单个字段     //query := map[string]interface{}{     //    "query": map[string]interface{}{     //        "match": map[string]interface{}{     //            "title": "我爱你中国",     //        },     //    },     //    "highlight": map[string]interface{}{     //        "pre_tags":  []string{""},     //        "post_tags": []string{""},     //        "fields": map[string]interface{}{     //            "title": map[string]interface{}{},     //        },     //    },     //}      //搜索多个字段     //query := map[string]interface{}{     //    "query": map[string]interface{}{     //        "multi_match": map[string]interface{}{     //            "query":  "中国",     //            "fields": []string{"title", "content"},     //        },     //    },     //    "highlight": map[string]interface{}{     //        "pre_tags":  []string{""},     //        "post_tags": []string{""},     //        "fields": map[string]interface{}{     //            "title": map[string]interface{}{},     //        },     //    },     //}     //提高某个字段权重,可以使用 ^ 字符语法为单个字段提升权重,在字段名称的末尾添加 ^boost ,其中 boost 是一个浮点数:     //query := map[string]interface{}{     //    "query": map[string]interface{}{     //        "multi_match": map[string]interface{}{     //            "query":  "中国",     //            "fields": []string{"title", "content^2"},     //        },     //    },     //    "highlight": map[string]interface{}{     //        "pre_tags":  []string{""},     //        "post_tags": []string{""},     //        "fields": map[string]interface{}{     //            "title": map[string]interface{}{},     //        },     //    },     //}      //显示所有的     //query := map[string]interface{}{     //    "query": map[string]interface{}{     //        "match_all": map[string]interface{}{},     //    },     //}     //es.Search(index, query)     //地理距离过滤器( geo_distance )以给定位置为圆心画一个圆,来找出那些地理坐标落在其中的文档:     //query := map[string]interface{}{     //    "query": map[string]interface{}{     //        "bool": map[string]interface{}{     //            "must": map[string]interface{}{     //                "match_all": map[string]interface{}{}, // 这里不设置其他查询条件,所以匹配全部文档     //            },     //            "filter": map[string]interface{}{     //                "geo_distance": map[string]interface{}{     //                    "distance": "100km",     //                    "location": map[string]interface{}{     //                        "lat": 40.715,     //                        "lon": -73.988,     //                    },     //                }},     //        },     //    },     //    "sort": map[string]interface{}{ // 设置排序条件     //        "_geo_distance": map[string]interface{}{ //_geo_distance代表根据距离排序     //            "location": map[string]interface{}{ //根据location存储的经纬度计算距离。     //                "lat": 40.715,  //当前纬度     //                "lon": -73.988, //当前经度     //            },     //            "order": "asc", // asc 表示升序,desc 表示降序     //        }},     //}     //es.Search(index, query)     //精确值查询     //query := map[string]interface{}{     //    "query": map[string]interface{}{     //        "match": map[string]interface{}{     //            "age": "20",     //        },     //    },      //}     //es.Search(index, query)     //范围查询     //通过range实现范围查询,类似SQL语句中的>, >=, <, <=表达式。     //gte范围参数 - 等价于>=     //lte范围参数 - 等价于 <=     //范围参数可以只写一个,例如:仅保留 "gte": 10, 则代表 FIELD字段 >= 10     //query := map[string]interface{}{     //    "query": map[string]interface{}{     //        "range": map[string]interface{}{     //            "age": map[string]interface{}{     //                "gte": "19",     //                "lte": "20",     //            },     //        },     //    },     //}     //es.Search(index, query)     //组合查询 如果需要编写类似SQL的Where语句,组合多个字段的查询条件,可以使用bool语句。     //"must": [], // must条件,类似SQL中的and, 代表必须匹配条件     //"must_not": [], // must_not条件,跟must相反,必须不匹配条件     //"should": [] // should条件,类似SQL中or, 代表匹配其中一个条件     query := map[string]interface{}{         "query": map[string]interface{}{             "bool": map[string]interface{}{                 "must": []map[string]interface{}{                     {                         "match": map[string]interface{}{                             "age": "19",                         },                     },                     {                         "match": map[string]interface{}{                             "title": "中国",                         },                     },                 },             },         },     }     es.Search(index, query)      //使用mysql的方式来请求     //query := map[string]interface{}{     //    "query": "select title from " + index + " where title like "%中国%"", //这里使用mysql的方式来请求,非常简单,符合开发习惯,简化es入门门槛,支持order,支持Limit,那么排序和分页就自己写好了     //}     //query := map[string]interface{}{     //    "query": "select title from " + index + " where title = "中国"", //这里使用mysql的方式来请求,非常简单,符合开发习惯,简化es入门门槛,支持order,支持Limit,那么排序和分页就自己写好了     //}     //es.SearchEsapiSql(query)      //测试分词     //query := map[string]interface{}{     //    "analyzer": "ik_smart", //智能分词用:ik_smart,最大化分词用:ik_max_word     //    "text":     "中国华人民",     //}     //url := index + "_analyze?pretty=true"      //query := map[string]interface{}{     //    "query": map[string]interface{}{     //        "match": map[string]interface{}{     //            "title": "我爱你中国",     //        },     //    },     //    "highlight": map[string]interface{}{     //        "pre_tags":  []string{""},     //        "post_tags": []string{""},     //        "fields": map[string]interface{}{     //            "title": map[string]interface{}{},     //        },     //    },     //}     //url := index + "/_search"      //es.SearchHttp("GET", url, query)  } 参考资料
  https://github.com/elastic/go...
  https://www.tizi365.com/archi...
  https://www.elastic.co/guide/... links目录

开启新篇章!MSIMPGZ490GAMINGCARBONWIFI主板开箱话说,英特尔第十代酷睿桌面处理器即将上市,而作为英特尔第十代酷睿桌面处理器的座驾,Z490B460以及H410在内的400系列芯片组主板率先登场,而楼主也在近日收到MSI微星旗下针小米11公布WIFI问题处理方案,米黑转米粉?据了解小米服务那些事官方微博昨天发文称近期将关注小米11系列产品出现的烧WIFI问题。这个问题之前小编也看到很多网友吐槽,如果小米真的能解决,估计有一波米黑会转米粉。买小米选转转优平民版大金刚电竞游戏显示器,优派黑豹VX2719PRO上手玩去年底,优派在LG1msNanoIPS面板问世以后推出了全新的大金刚电竞游戏显示器XG270QG,1msNanoIPS面板也以大金刚面板的姿态进入大家的视线。然而对于很多非发烧玩家周受资离职小米,背后的原因让人心酸原集团高级副总裁国际部总裁周受资因个人原因辞去小米集团执行董事职位,离开小米后加入字节跳动担任CFO,那为什么周受资要离开小米呢?回看周受资在小米这6年的征程,似乎就能找到答案周受小米11ProUltra预售销量出炉,单平台破3万之前有网友说,小米卖贵走高端,绝对卖不动,然而从小米10和小米11这种不到一个月时间破百万的销量看,小米手机在4K定价用户是完全可以接受的,5千价位相的Pro版相比之下差一点,但也realme真我GT大师探索版PK荣耀P50Pro,到底怎么选?7月27日相关数据显示realme真我GT大师探索版首战秒破亿,成为3000元档的热门机型。其搭载骁龙870处理器,屏幕采用三星AMOLED,中框金属设计行李箱后盖设计,低调又不失小米连续入围财富世界500强,成为增长最快的互联网企业8月2日,小米再度登上了财富世界500强,相较去年排名上升了84名,排名338位。这是小米连续三年上榜,而今年小米也成为互联网相关企业中进步最快的世界500强企业。7月16日,Ca8个让人无法拒绝的宝藏小众APP,每一款都很强大,值得收藏8个让人无法拒绝的宝藏小众APP,每一款都很强大!1理科生都爱看的历史软件全历史一款非常有趣的历史学习软件,它通过时空关系为表达特性来向用户呈现历史知识。以一种连贯的视角来见证时代MIUI13文件管理器开始内测,新系统预计8月发布近期MIUI文件管理器进行了大改,并开始了内测,根据以往节奏,在老系统后期还有东西进行大改版,说明新系统要来了,而这些这都是给新系统准备的,所以基本可以确定这就是MIUI13的文件打游戏上分难?开挂神器了解一下打游戏上分难?那是你还不了解这些开挂神器!话不多说下面马上进入上半年大热的游戏手机推荐!一努比亚红魔5G12128G内存官方售价3799元起ZZ平台95新二手2168元起转转App聊一聊RedmiK40游戏版的6个细节一,K40游戏版这个独特的氛围灯设计,不仅是氛围灯,还是呼吸灯,日常消息来电会闪烁提示,充电时也会用红黄绿三种颜色显示电量情况。二,由于天玑1200不支持LPDDR5内存,所以K4
科学家可能在仙女座大星系探测到中等质量黑洞宇宙有许多恒星质量黑洞,达数十倍太阳质量(M),是由大质量恒星坍缩而成。还有更容易观察到的超大质量黑洞,达数百万至数十亿倍太阳,坐达到星系中心,形成原因尚未厘清。由于两者质量差距巨雷军发起调查,米粉最喜欢的小米手机,是5年前的小米6?为了庆祝小米12周年生日,小米科技创始人雷军在近日发起了一个调查你最喜欢哪部小米手机?根据网友的留言,总共有八款手机入选,这八款手机分别是小米2小米4小米6小米10至尊版小米11U真正的成功者看起来都傻乎乎的吗?是成熟稳健内敛低调,为人谦逊,有礼知退让,宁可自己吃亏吃苦也不能亏了自己人。是有自己的追求和做人的道德底线,看着傻乎乎确有自己的安排和条理。很多成功者都是偏执狂,另外一种说法就是执怎样才能看到斯诺克直播?下载中国体育APP,就可以看到最全的斯诺克比赛。用钱买票。说是话,为了看斯诺克直播我找了很多频道。比如央视网络,一般国内大型比赛或者重量级国际比赛章鱼直播直播8等等。我看还有的说巨蚂蚁生命谁都可以剥夺吗?生命分低级和高级!高级生命有感情,痛苦。而蚂蚁显然不可和狗狗并列,就象你不可以和一只鸡相提并论一样。当然不是蚂蚁为食物而活以数量而存续有组织分工和社会秩序为自然界清道夫之一生活中人2022年WiFi6趋势WiFi6基于IEEE802。11ax标准,可提供当今用户在最苛刻的WiFi环境中所需的容量效率覆盖范围和性能。WiFi用户在2022年要求更高效更可靠和更安全的连接。原因物联网(新国都欧洲获牌,支付终端成出海新趋势移动支付网消息中国支付行业正在加速出海。近日,新国都宣布,旗下全资子公司新国都欧洲股份有限公司(以下简称新国都欧洲)收到卢森堡金融监管委员会通知,获批准授予支付机构经营许可证并完成福布斯发布2022全球亿万富豪榜,马斯克登顶!钟睒睒排第十七4月5日,福布斯发布2022全球亿万富豪榜,从榜单排名看,特斯拉CEO埃隆马斯克以2190亿美元总资产排富豪榜第一位。在过去一年里,马斯克的财富增加了680亿美元。排在第二的是贝索64GB储存一样用三招教你节省手机储存空间智能手机刚刚起步的时候,很多厂商都支持外置TF卡拓展,但随着科技发展,轻薄的握持手感成为了各大厂的追求,为了更合理的运用弥足珍贵的手机内部空间,外置拓展模块也随之退出历史舞台,取而生命的禁区,国际空间站的预选坟墓,尼莫点有什么特殊之处?1992年,加拿大测量工程师HrvojeLukatela试图在海洋上寻找一个距离陆地最远的点,虽然这个想法很简单,但是实行起来并不容易,因为即便是最中心的海域,周围也可能会有岛屿。形成服务业与制造业双轮驱动的就业创造机制随着互联网和信息技术的飞速发展,制造业与服务业的深度融合已成为产业发展的主流趋势。以往的观点认为,制造业对服务业就业具有单向乘数效应。这一观点忽略了服务业就业对制造业就业存在的反向