news 2026/6/10 12:39:15

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/6/10 10:50:09

光储设计仿真系统推荐

一、国际品牌1.PVSYST作为光储设计仿真领域的经典工具,PVSYST深受全球建筑师、工程师和研究人员青睐。它支持并网、离网等多种光伏储能系统的设计与数据分析,内置广泛的气象数据库和组件数据库,能满足项目从初步设计到详细数据分析的全流程需…

作者头像 李华
网站建设 2026/6/10 1:46:04

Sublime Text配色方案终极配置指南:从单调到专业的视觉升级

Sublime Text配色方案终极配置指南:从单调到专业的视觉升级 【免费下载链接】colour-schemes Colour schemes for a variety of editors created by Dayle Rees. 项目地址: https://gitcode.com/gh_mirrors/co/colour-schemes 你是否在深夜编程时被刺眼的默认…

作者头像 李华
网站建设 2026/6/10 0:57:43

yuzu模拟器中文乱码修复:5分钟快速解决指南

yuzu模拟器中文乱码修复:5分钟快速解决指南 【免费下载链接】yuzu-downloads 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu-downloads 还在为yuzu模拟器中文字体显示问题而烦恼吗?游戏内的对话变成乱码、菜单显示方块字,这…

作者头像 李华
网站建设 2026/6/9 15:49:56

认证加密算法对决:AES-GCM与ChaCha20-Poly1305的技术选择指南

认证加密算法对决:AES-GCM与ChaCha20-Poly1305的技术选择指南 【免费下载链接】libsignal Home to the Signal Protocol as well as other cryptographic primitives which make Signal possible. 项目地址: https://gitcode.com/GitHub_Trending/li/libsignal …

作者头像 李华
网站建设 2026/6/10 0:36:48

16、DB2应用开发与pureXML技术全解析

DB2应用开发与pureXML技术全解析 1. 航班计算与信息同步示例 在航班信息处理场景中,若从多伦多到北京平均飞行时间为12小时,Air Discovery系统可通过添加亚特兰蒂斯航空离开多伦多的起飞时间、飞行时长以及一些缓冲时间,来计算从北京到上海的转机航班。缓冲时间的小时数可…

作者头像 李华