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.pswp.cn/news/894814.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894814.shtml
英文地址,請注明出處:http://en.pswp.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…