es官方go客户端创建ik索引并进行查询操作

es-go client引入gomod

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

连接es服务器(不经过安全校验)

cfg := elasticsearch.Config{Addresses: []string{"http://localhost:9200",},
}
es, err := elasticsearch.NewClient(cfg)
if err != nil {panic(err)
}

创建索引

func createIndex(es *elasticsearch.Client) {// 创建索引的 JSON 配置indexName := "my_index"indexMapping := map[string]interface{}{"settings": map[string]interface{}{"analysis": map[string]interface{}{"analyzer": map[string]interface{}{"ik_analyzer": map[string]interface{}{"type":      "custom","tokenizer": "ik_max_word",},},},},"mappings": map[string]interface{}{"properties": map[string]interface{}{"title": map[string]interface{}{"type":     "text","analyzer": "ik_analyzer",},"content": map[string]interface{}{"type":     "text","analyzer": "ik_analyzer",},},},}// 将索引配置转换为 JSON 字符串indexMappingJSON, err := json.Marshal(indexMapping)if err != nil {log.Fatalf("Error marshaling the index mapping: %s", err)}// 创建索引请求req := esapi.IndicesCreateRequest{Index: indexName,Body:  strings.NewReader(string(indexMappingJSON)),}// 发送请求res, err := req.Do(context.Background(), es)if err != nil {log.Fatalf("Error creating the index: %s", err)}defer res.Body.Close()// 检查响应if res.IsError() {log.Fatalf("Error creating the index: %s", res.String())}fmt.Printf("Index created: %s\n", res.String())
}

校验索引分词效果是否生效

func use_analyze(es *elasticsearch.Client) {// 分词测试的 JSON 配置analyzeRequest := map[string]interface{}{"text":     "今天天气真好,适合出去玩","analyzer": "ik_analyzer",}// 将分词请求转换为 JSON 字符串analyzeRequestJSON, err := json.Marshal(analyzeRequest)if err != nil {log.Fatalf("Error marshaling the analyze request: %s", err)}// 创建分词请求req := esapi.IndicesAnalyzeRequest{Index: "my_index",Body:  strings.NewReader(string(analyzeRequestJSON)),}// 发送请求res, err := req.Do(context.Background(), es)if err != nil {log.Fatalf("Error analyzing the text: %s", err)}defer res.Body.Close()// 检查响应if res.IsError() {log.Fatalf("Error analyzing the text: %s", res.String())}// 解析响应var result map[string]interface{}if err := json.NewDecoder(res.Body).Decode(&result); err != nil {log.Fatalf("Error parsing the response: %s", err)}// 输出分词结果fmt.Printf("Tokens: %+v\n", result["tokens"])
}

插入或者更新数据并查询

func insertAndSearch(es *elasticsearch.Client) {// 插入文档doc := map[string]interface{}{"title":   "测试文档","content": "今天天气真好,适合出去玩",}docJSON, err := json.Marshal(doc)if err != nil {log.Fatalf("Error marshaling the document: %s", err)}req := esapi.IndexRequest{Index:      "my_index",DocumentID: "1",Body:       strings.NewReader(string(docJSON)),}res, err := req.Do(context.Background(), es)if err != nil {log.Fatalf("Error indexing the document: %s", err)}defer res.Body.Close()if res.IsError() {log.Fatalf("Error indexing the document: %s", res.String())}fmt.Printf("Document indexed: %s\n", res.String())// 查询文档query := map[string]interface{}{"query": map[string]interface{}{"match": map[string]interface{}{"content": "天气",},},}queryJSON, err := json.Marshal(query)if err != nil {log.Fatalf("Error marshaling the query: %s", err)}searchReq := esapi.SearchRequest{Index: []string{"my_index"},Body:  strings.NewReader(string(queryJSON)),}searchRes, err := searchReq.Do(context.Background(), es)if err != nil {log.Fatalf("Error searching the document: %s", err)}defer searchRes.Body.Close()if searchRes.IsError() {log.Fatalf("Error searching the document: %s", searchRes.String())}var searchResult map[string]interface{}if err := json.NewDecoder(searchRes.Body).Decode(&searchResult); err != nil {log.Fatalf("Error parsing the search response: %s", err)}fmt.Printf("Search results: %+v\n", searchResult)println("search res:", searchRes.String())
}

综上就完成了es go客户端操作es服务器的相关操作

总结

本次测试用例是在kimi智能助手的帮助下写的,合理使用人工智能确实能够极大程度的提高效率,比单纯的阅读、一个个查询文档、api接口的效率好上许多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【容器技术01】使用 busybox 构建 Mini Linux FS

使用 busybox 构建 Mini Linux FS 构建目标 在 Linux 文件系统下构建一个 Mini 的文件系统,构建目标如下: minilinux ├── bin │ ├── ls │ ├── top │ ├── ps │ ├── sh │ └── … ├── dev ├── etc │ ├── g…

【C语言系列】深入理解指针(5)

深入理解指针(5) 一、sizeof和strlen的对比1.1sizeof1.2strlen1.3sizeof和strlen的对比 二、数组和指针笔试题解析2.1 一维数组2.2 字符数组2.2.1代码1:2.2.2代码2:2.2.3代码3:2.2.4代码4:2.2.5代码5&#…

标志的推理

下面的讨论是我对《对编程实现拟人智能可行性的论证》这篇文章的“赋值与对象的标志”这一节的展开讨论。 标志能够使我们更好的思维(比如用轮廓标记物体对象,用兴奋强度标记回忆情况等等)。有思维标志、信息标志,单纯标志、组合…

【蓝桥杯嵌入式】2_LED

1、电路图 74HC573是八位锁存器,当控制端LE脚为高电平时,芯片“导通”,LE为低电平时芯片“截止”即将输出状态“锁存”,led此时不会改变状态,所以可通过led对应的八个引脚的电平来控制led的状态,原理图分析…

Diskgenius系统迁移之后无法使用USB启动

前言 本文用于记录系统迁移中遇到的问题及解决方法,如有不对请指出,谢谢! 现象 使用DiskGenius进行系统迁移后,使用USB启动失败,反复在品牌logo和黑屏之间切换,期间还会在左上角显示”reset system“报错…

使用 Postman 进行 API 测试:从入门到精通

使用 Postman 进行 API 测试:从入门到精通 使用 Postman 进行 API 测试:从入门到精通一、什么是 API 测试?二、Postman 简介三、环境搭建四、API 测试流程1. 收集 API 文档2. 发送基本请求示例:发送 GET 请求示例代码(…

Android Studio:Application 和 Activity的区别

Application 和 Activity 是 Android 中非常重要的两个组件,它们分别负责不同的生命周期管理和应用的不同层次的操作。 Application 是应用级别的生命周期管理,它在整个应用运行时只有一个实例,负责应用的全局初始化和资源管理。Activity 是…

Mac本地体验LM studio

博主很懒,不爱打字! 1、LM studio官网:LM Studio - Discover, download, and run local LLMs 2、下载DMG文件,安装 3、使用vscode工具,commandshiftH【全局替换功能】,选择目录/Applications/LM\ Studio…

SQL Server 数据库备份指南

SQL Server备份是数据库维护的日常工作。备份的目的是在发生数据丢失、损坏甚至硬件故障时将数据库和事务日志恢复到最近的时间点。您可以借助专业的SQL Server备份软件,操作起来更方便。前提需要安装SQL Server Management Studio (SSMS)工具。 对于 SQL 数据库备份,有多种…

我最近在干什么【2】

前言 这系列的上一篇是2024.12.05写的,现在是2025.02.06,这都两个月🤔小久。 不是完整全面的技术分享,话题聚焦个人成长(学的技术、了解到的信息、看的书……) 方面。文章偏意识流点,单纯分享我…

Temperature、Top-P、Top-K、Frequency Penalty详解

在生成式AI(比如ChatGPT)中,Temperature、Top-P、Top-K、Frequency Penalty 这些参数用于控制文本生成的多样性、随机性和重复度,它们的作用如下: 1. Temperature(温度) 作用:控制输…

4. Go结构体使用

1、结构体的简介 结构体(Struct)是编程语言中常见的一种复合数据类型,它将不同类型的数据元素(成员)组合成一个单一的实体。通过结构体,程序员可以将具有不同类型和性质的信息绑定到一个对象中&#xff0c…

sqlite 查看表结构

在SQLite中,查看表结构通常有以下几种方法: 使用.schema命令 在SQLite的命令行界面中,你可以使用.schema命令加上表名来查看该表的结构。例如,如果你想查看名为your_table_name的表结构,你可以这样做: .s…

SpringAI介绍及本地模型使用方法

博客原文地址 前言 Spring在Java语言中一直稳居高位,与AI的洪流碰撞后也产生了一些有趣的”化学反应“,当然你要非要说碰撞属于物理反应也可以, 在经历了一系列复杂的反应方程后,Spring家族的新成员——SpringAI,就…

ip地址是手机号地址还是手机地址

在数字化生活的浪潮中,IP地址、手机号和手机地址这三个概念如影随形,它们各自承载着网络世界的独特功能,却又因名称和功能的相似性而时常被混淆。尤其是“IP地址”这一术语,经常被错误地与手机号地址或手机地址划上等号。本文旨在…

车载以太网__传输层

车载以太网中,传输层和实际用的互联网相差无几。本篇文章对传输层中的IP进行介绍 目录 什么是IP? IP和MAC的关系 IP地址分类 私有IP NAT DHCP 为什么要防火墙穿透? 广播 本地广播 直接广播 本地广播VS直接广播 组播 …

Docker 数据卷(Volume)详细介绍

Docker 数据卷(Volume)详细介绍 1. 什么是 Docker 数据卷? Docker 数据卷(Volume)是一种用于 持久化数据 和 容器间数据共享 的机制。由于容器的存储是临时的,容器删除后其中的数据会丢失,因此…

wxWidgets生成HTML文件,带图片转base64数据

编译环境大家可以看我之前的文章,CodeBlocks + msys2 + wx3.2,win10 这里功能就是生成HTML文件,没用HTML库,因为是自己固定的格式,图片是一个vector,可以动态改变数量的。 效果如下: #include <wx/string.h> #include <wx/file.h> #include <wx/ima…

网络原理一>数据链路层协议->以太网协议

目录 以太网协议的结构&#xff1a;类型&#xff1a;ARP请求应答报文&#xff1a;CRC&#xff1a;MTU: 为什么需要mac地址&#xff1a;mac地址和IP地址的区别&#xff1a; 以太网协议的结构&#xff1a; 以太网是数据链路层和物理层的主要协议 源IP&#xff0c;目的IP就不多说…

疯狂SQL转换系列- SQL for Milvs2.4

鉴于Milvus仍在不停的迭代新版本&#xff0c;推出新功能&#xff0c;其SDK目前并不稳定。目前其2.4版本的SDK接口已与之前的2.2版本有了较大的差别&#xff0c;功能上也有了一定的调整。为此&#xff0c;我们重新提供了针对[Milvus2.4](https://github.com/colorknight/moql-tr…