go-elasticsearch创建ik索引并进行查询操作

devtools/2025/2/12 21:57:48/

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.ppmy.cn/devtools/157777.html

相关文章

初窥强大,AI识别技术实现图像转文字(OCR技术)

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据、人工智能领域创作者。目前从事python全栈、爬虫和人工智能等相关工作,主要擅长领域有:python…

at coder ABC 392

A - Shuffled Equation 题意:给一个整数序列(A1,A2,A3),这三个数进行排序后形成(B1,B2,B3)问是否存在排序使B1*B2B3? 思路:因为一共就三个数,只有三种排列方式,我直接全…

【Linux】Socket编程—UDP

🔥 个人主页:大耳朵土土垚 🔥 所属专栏:Linux系统编程 这里将会不定期更新有关Linux的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目…

设计模式-状态模式:让对象的行为随状态改变而清晰可控

🌟 引言 场景痛点: 你是否遇到过这样的代码? if (state == "待支付") {// 处理待支付逻辑 } else if (state == "已支付") {// 处理已支付逻辑 } else if (...) {// 无限的条件分支... }条件分支爆炸导致代码臃肿、难以维护?状态模式正是解决这类问…

python_json转yolo文件

文章内容 将labelme的内容转换成yolo需要的txt文件 import json import os import shutil import random# Convert label to idx # with open("labels.txt", "r") as f: # classes [c.strip() for c in f.readlines()] # idx_dict {c: str(i) f…

WebRTC 客户端与ZLMediaKit通讯

1 web浏览器js方式 要使用 WebRTC 客户端与 ZLMediaKit 通讯,您需要设置一个 WebRTC 客户端并与 ZLMediaKit 进行连接。以下是一个基本的步骤和示例代码,帮助您实现这一目标。 ### 步骤 1. **安装 ZLMediaKit**:确保您已经在服务器上安装并…

[Linux] 关于路径

背景 在终端执行命令时,如何理解这件事?并且如何理解附加的一些参数? 回答 路径的概念 绝对路径与相对路径 绝对路径(Absolute Path):以根目录 / 开始,完整地描述了从根目录到目标文件或目录的层次关系。例如&am…

JavaScript 基础语法:变量、数据类型、运算符、条件语句、循环

JavaScript 是一种动态类型的脚本语言,广泛用于前端开发。以下是 JavaScript 基础语法的核心内容,包括变量、数据类型、运算符、条件语句和循环。 --- ### 1. 变量 变量用于存储数据。JavaScript 中有三种声明变量的方式: - **var**&…