news 2026/8/6 7:09:28

golang调用 elasticsearch 8,向量检索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
golang调用 elasticsearch 8,向量检索

go get github.com/elastic/go-elasticsearch/v8

文档:https://www.elastic.co/docs/reference/elasticsearch/clients/go/getting-started#_indexing_documents

下载解压 elasticsearch-8.10.4

D:\dev\php\magook\trunk\server\elasticsearch-8.10.4\bin elasticsearch.bat
D:\dev\php\magook\trunk\server\elasticsearch-headnpmrun start

访问:http://127.0.0.1:9200/

访问:http://localhost:9100/

如果有向量类型的字段,需要先定义 mappings。

还需要特别注意的是 embedding 维度要匹配,elasticsearch中的dense_vector类型,在版本8.0 – 8.11中,默认的最高维度是2048,在 **8.12+**之后是4096,当然,这个值越高计算越慢。数据的维度必须小于es能存储的维度,否则会报错。

此处采用火山引擎的模型doubao-embedding-large-text-250515,其维度是2048,参考 模型列表

packagemainimport("bytes""context""encoding/json""fmt""log""os""strings""github.com/cloudwego/eino-ext/components/embedding/ark""github.com/elastic/go-elasticsearch/v8""github.com/elastic/go-elasticsearch/v8/esapi")funcmain(){client,err:=elasticsearch.NewClient(elasticsearch.Config{Addresses:[]string{"http://localhost:9200"},})iferr!=nil{log.Panicf("connect es8 failed, err=%v",err)}////////////////////////////////////////////createIndex(client,"my_index_vector")////////////////////////////////////////////ctx:=context.Background()ebs,err:=ark.NewEmbedder(ctx,&ark.EmbeddingConfig{BaseURL:os.Getenv("ARK_BASE_URL"),APIKey:os.Getenv("ARK_API_KEY"),Model:os.Getenv("ARK_EMBEDDING_MODEL"),})iferr!=nil{panic(err)}content:="Eino 旨在提供 Golang 语言的 AI 应用开发框架。 Eino 参考了开源社区中诸多优秀的 AI 应用开发框架,例如 LangChain、LangGraph、LlamaIndex 等,提供了更符合 Golang 编程习惯的 AI 应用开发框架。"res,err:=ebs.EmbedStrings(ctx,[]string{content})iferr!=nil{panic(err)}fmt.Println("info: ",len(res),len(res[0]))indexDocument(client,"my_index_vector","1",Document{Title:"Eino是什么",Content:content,Embedding:res[0],})}funccreateIndex(es*elasticsearch.Client,indexNamestring){mapping:=`{ "mappings": { "properties": { "title": { "type": "text" }, "content": { "type": "text" }, "embedding": { "type": "dense_vector", "dims": 2048, "index": true, "similarity": "cosine" } } } }`req:=esapi.IndicesCreateRequest{Index:indexName,Body:strings.NewReader(mapping),}res,err:=req.Do(context.Background(),es)iferr!=nil{log.Fatalf("Error creating index: %s",err)}deferres.Body.Close()ifres.IsError(){log.Printf("Error: %s",res.String())}else{fmt.Println("Index created successfully")}}typeDocumentstruct{Titlestring`json:"title"`Contentstring`json:"content"`Embedding[]float64`json:"embedding"`}funcindexDocument(es*elasticsearch.Client,indexName,idstring,doc Document){data,_:=json.Marshal(doc)req:=esapi.IndexRequest{Index:indexName,DocumentID:id,Body:strings.NewReader(string(data)),Refresh:"true",}res,err:=req.Do(context.Background(),es)iferr!=nil{log.Fatalf("Error indexing document: %s",err)}deferres.Body.Close()ifres.IsError(){log.Printf("Error: %s",res.String())}else{fmt.Printf("Document %s indexed\n",id)}}

输出

Index created successfully info:12048Document1indexed

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 19:47:12

Bili-Hardcore终极指南:5步轻松搞定B站硬核会员自动答题

Bili-Hardcore终极指南:5步轻松搞定B站硬核会员自动答题 【免费下载链接】bili-hardcore bilibili 硬核会员 AI 自动答题,直接调用 B 站 API,非 OCR 实现 项目地址: https://gitcode.com/gh_mirrors/bi/bili-hardcore 还在为B站硬核会…

作者头像 李华
网站建设 2026/8/6 12:03:17

71M参数颠覆俄语电话语音识别:T-one以8.63%WER树立行业新标杆

71M参数颠覆俄语电话语音识别:T-one以8.63%WER树立行业新标杆 【免费下载链接】T-one 项目地址: https://ai.gitcode.com/hf_mirrors/t-tech/T-one 导语 俄罗斯T-Software DC团队发布的开源流式语音识别模型T-one,以7100万参数实现电话场景8.63…

作者头像 李华
网站建设 2026/8/4 19:10:02

5、App Volumes部署与配置全解析

App Volumes部署与配置全解析 1. AppStack部署最佳实践 在环境中部署AppStack时,有一些最佳实践需要遵循。 1.1 每台虚拟机的AppStack数量 当前最佳实践是将每台虚拟桌面机同时挂载的AppStack数量限制在12 - 15个以内。理论上,一台虚拟桌面机可配置4个虚拟SCSI适配器,每…

作者头像 李华
网站建设 2026/8/5 10:01:45

OpenDrop无线传输终极指南:从基础配置到高级应用全解析

OpenDrop无线传输终极指南:从基础配置到高级应用全解析 【免费下载链接】opendrop An open Apple AirDrop implementation written in Python 项目地址: https://gitcode.com/gh_mirrors/op/opendrop OpenDrop作为开源的Apple AirDrop实现,为跨平…

作者头像 李华
网站建设 2026/8/4 14:14:09

38、邮件格式与路由配置全解析

邮件格式与路由配置全解析 1. 混合不同邮件格式 当不同系统和聪明的人汇聚在一起时,必然会寻求将不同系统互连以实现网络互通的方法。于是,出现了许多不同的邮件网关,可将两个不同的电子邮件系统连接起来,实现邮件的转发。在连接两个系统时,地址处理是关键问题。 1.1 混…

作者头像 李华