news 2026/2/9 17:21:27

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/2/7 16:59:21

Qwen2.5-Omni-7B-GPTQ-Int4:多模态大模型走向边缘设备的里程碑

导语 【免费下载链接】Qwen2.5-Omni-7B-GPTQ-Int4 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen2.5-Omni-7B-GPTQ-Int4 阿里通义千问团队推出的Qwen2.5-Omni-7B-GPTQ-Int4多模态模型,通过创新的Thinker-Talker架构与GPTQ-Int4量化技术&#xff0…

作者头像 李华
网站建设 2026/2/2 23:05:05

123123

123123123123

作者头像 李华
网站建设 2026/2/2 22:59:07

5步搞定MPC-HC主题定制:新手也能轻松美化播放器界面

5步搞定MPC-HC主题定制:新手也能轻松美化播放器界面 【免费下载链接】mpc-hc Media Player Classic 项目地址: https://gitcode.com/gh_mirrors/mp/mpc-hc 厌倦了千篇一律的播放器外观?想要打造属于自己的个性化视频播放体验?Media Pl…

作者头像 李华
网站建设 2026/2/8 10:14:04

3、深入了解 App Volumes:组件、架构与部署规划

深入了解 App Volumes:组件、架构与部署规划 1. 前期准备与用户示例 在正式部署 App Volumes 之前,除了管理员账户,还创建了多个 Active Directory 组来代表不同部门,每个组中包含几个用户账户,这些用户和组将在后续示例中用于演示用户分配。 2. App Volumes 核心组件 …

作者头像 李华
网站建设 2026/2/5 18:34:09

Access数据库引擎:告别Jet.OLEDB.4.0兼容性困扰

Access数据库引擎:告别Jet.OLEDB.4.0兼容性困扰 【免费下载链接】AccessDatabaseEngine_X64下载与安装指南 本仓库提供了一个名为 AccessDatabaseEngine_X64.zip 的资源文件,该文件用于解决在开发过程中遇到的“Microsoft.Jet.OLEDB.4.0”提供程序未在本…

作者头像 李华