[{"data":1,"prerenderedAt":1903},["ShallowReactive",2],{"content:\u002F2025\u002F10\u002Felasticsearch-go":3,"surround:\u002F2025\u002F10\u002Felasticsearch-go":1893},{"id":4,"title":5,"body":6,"categories":1871,"date":1873,"description":1874,"draft":1875,"extension":1876,"image":1877,"meta":1878,"navigation":402,"path":1880,"permalink":1877,"published":1877,"readingTime":1881,"recommend":1877,"references":1877,"seo":1886,"sitemap":1887,"stem":1888,"tags":1889,"type":1891,"updated":1873,"__hash__":1892},"content\u002Fposts\u002F2025\u002F10\u002Felasticsearch-go.md","go-elasticsearch使用指南",{"type":7,"value":8,"toc":1854},"minimark",[9,18,22,25,50,53,56,199,202,221,224,326,329,333,337,579,604,607,743,746,937,940,1076,1079,1082,1318,1321,1505,1512,1516,1809,1812,1834,1850],[10,11,12,13,17],"p",{},"在 Go 项目中，Elasticsearch 是非常常用的搜索和分析引擎。随着官方 ",[14,15,16],"code",{"code":16},"go-elasticsearch"," v9 的发布，TypedClient 的类型安全和请求构建方式发生了一些变化。本文结合示例代码，带你一步步掌握 Go 调用 Elasticsearch 的基本操作。",[19,20,21],"h2",{"id":21},"安装依赖",[10,23,24],{},"在 Go 项目中添加依赖：",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","go get github.com\u002Felastic\u002Fgo-elasticsearch\u002Fv9\n","bash","",[14,33,34],{"__ignoreMap":31},[35,36,39,43,47],"span",{"class":37,"data-line":38,"line":38},"line",1,[35,40,42],{"class":41},"sScJk","go",[35,44,46],{"class":45},"sZZnC"," get",[35,48,49],{"class":45}," github.com\u002Felastic\u002Fgo-elasticsearch\u002Fv9\n",[10,51,52],{},"TypedClient 默认提供类型安全的 API，可以直接操作索引、文档和聚合。",[19,54,55],{"id":55},"创建客户端",[26,57,60],{"className":58,"code":59,"language":42,"meta":31,"style":31},"language-go shiki shiki-themes github-light github-dark","cfg := es.Config{\n    Addresses: []string{\"http:\u002F\u002F127.0.0.1:9200\"},\n}\nclient, err := es.NewTypedClient(cfg)\nif err != nil {\n    log.Fatalf(\"创建 client 失败: %v\", err)\n}\n",[14,61,62,85,117,123,146,167,194],{"__ignoreMap":31},[35,63,64,68,72,75,78,81],{"class":37,"data-line":38,"line":38},[35,65,67],{"class":66},"sVt8B","cfg ",[35,69,71],{"class":70},"szBVR",":=",[35,73,74],{"class":41}," es",[35,76,77],{"class":66},".",[35,79,80],{"class":41},"Config",[35,82,84],{"class":83},"sSDpw","{\n",[35,86,88,92,95,99,102,105,108,111,114],{"class":37,"data-line":87,"line":87},2,[35,89,91],{"class":90},"indent","    ",[35,93,94],{"class":66},"Addresses: ",[35,96,98],{"class":97},"sJX2D","[",[35,100,101],{"class":97},"]",[35,103,104],{"class":70},"string",[35,106,107],{"class":97},"{",[35,109,110],{"class":45},"\"http:\u002F\u002F127.0.0.1:9200\"",[35,112,113],{"class":97},"}",[35,115,116],{"class":66},",\n",[35,118,120],{"class":37,"data-line":119,"line":119},3,[35,121,122],{"class":83},"}\n",[35,124,126,129,131,134,137,140,143],{"class":37,"data-line":125,"line":125},4,[35,127,128],{"class":66},"client, err ",[35,130,71],{"class":70},[35,132,133],{"class":66}," es.",[35,135,136],{"class":41},"NewTypedClient",[35,138,139],{"class":83},"(",[35,141,142],{"class":66},"cfg",[35,144,145],{"class":83},")\n",[35,147,149,152,155,158,162,165],{"class":37,"data-line":148,"line":148},5,[35,150,151],{"class":70},"if",[35,153,154],{"class":66}," err ",[35,156,157],{"class":70},"!=",[35,159,161],{"class":160},"sj4cs"," nil",[35,163,164],{"class":66}," ",[35,166,84],{"class":83},[35,168,170,172,175,178,180,183,186,189,192],{"class":37,"data-line":169,"line":169},6,[35,171,91],{"class":90},[35,173,174],{"class":66},"log.",[35,176,177],{"class":41},"Fatalf",[35,179,139],{"class":97},[35,181,182],{"class":45},"\"创建 client 失败: ",[35,184,185],{"class":160},"%v",[35,187,188],{"class":45},"\"",[35,190,191],{"class":66},", err",[35,193,145],{"class":97},[35,195,197],{"class":37,"data-line":196,"line":196},7,[35,198,122],{"class":83},[10,200,201],{},"注意：",[10,203,204,205,208,209,212,213,216,217,220],{},"1.必须带上协议头 ",[14,206,207],{"code":207},"http:\u002F\u002F"," 或 ",[14,210,211],{"code":211},"https:\u002F\u002F","，否则会报 URL 解析错误。\n2.如果 Elasticsearch 开启了用户名密码认证，可以通过 ",[14,214,215],{"code":215},"cfg.Username"," 和 ",[14,218,219],{"code":219},"cfg.Password"," 设置。",[19,222,223],{"id":223},"创建索引",[26,225,227],{"className":58,"code":226,"language":42,"meta":31,"style":31},"index, err := client.Indices.Create(\"my-index\").Do(context.Background())\nif err != nil {\n    log.Fatalf(\"创建索引失败: %v\", err)\n}\nfmt.Println(\"索引创建成功:\", index)\n",[14,228,229,269,283,304,308],{"__ignoreMap":31},[35,230,231,234,236,239,242,244,247,250,252,255,257,260,263,265,267],{"class":37,"data-line":38,"line":38},[35,232,233],{"class":66},"index, err ",[35,235,71],{"class":70},[35,237,238],{"class":66}," client.Indices.",[35,240,241],{"class":41},"Create",[35,243,139],{"class":83},[35,245,246],{"class":45},"\"my-index\"",[35,248,249],{"class":83},")",[35,251,77],{"class":66},[35,253,254],{"class":41},"Do",[35,256,139],{"class":83},[35,258,259],{"class":66},"context.",[35,261,262],{"class":41},"Background",[35,264,139],{"class":97},[35,266,249],{"class":97},[35,268,145],{"class":83},[35,270,271,273,275,277,279,281],{"class":37,"data-line":87,"line":87},[35,272,151],{"class":70},[35,274,154],{"class":66},[35,276,157],{"class":70},[35,278,161],{"class":160},[35,280,164],{"class":66},[35,282,84],{"class":83},[35,284,285,287,289,291,293,296,298,300,302],{"class":37,"data-line":119,"line":119},[35,286,91],{"class":90},[35,288,174],{"class":66},[35,290,177],{"class":41},[35,292,139],{"class":97},[35,294,295],{"class":45},"\"创建索引失败: ",[35,297,185],{"class":160},[35,299,188],{"class":45},[35,301,191],{"class":66},[35,303,145],{"class":97},[35,305,306],{"class":37,"data-line":125,"line":125},[35,307,122],{"class":83},[35,309,310,313,316,318,321,324],{"class":37,"data-line":148,"line":148},[35,311,312],{"class":66},"fmt.",[35,314,315],{"class":41},"Println",[35,317,139],{"class":83},[35,319,320],{"class":45},"\"索引创建成功:\"",[35,322,323],{"class":66},", index",[35,325,145],{"class":83},[10,327,328],{},"索引创建后，你就可以存储文档。",[19,330,332],{"id":331},"crud-操作","CRUD 操作",[334,335,336],"h3",{"id":336},"创建文档",[26,338,340],{"className":58,"code":339,"language":42,"meta":31,"style":31},"doc := struct {\n    Name  string `json:\"name\"`\n    Score int64  `json:\"score\"`\n}{\"codepzj\", 100}\n\nresp, err := client.Index(\"my-index\").\n    Document(doc).\n    Id(\"1\").\n    Header(\"Content-Type\", \"application\u002Fjson\").\n    Header(\"Accept\", \"application\u002Fjson\").\n    Do(context.Background())\nif err != nil {\n    log.Fatalf(\"创建文档失败: %v\", err)\n}\nfmt.Println(\"文档创建成功:\", resp)\n",[14,341,342,356,368,381,398,404,426,442,459,481,501,520,535,557,562],{"__ignoreMap":31},[35,343,344,347,349,352,354],{"class":37,"data-line":38,"line":38},[35,345,346],{"class":66},"doc ",[35,348,71],{"class":70},[35,350,351],{"class":70}," struct",[35,353,164],{"class":66},[35,355,84],{"class":83},[35,357,358,360,363,365],{"class":37,"data-line":87,"line":87},[35,359,91],{"class":90},[35,361,362],{"class":66},"Name  ",[35,364,104],{"class":70},[35,366,367],{"class":45}," `json:\"name\"`\n",[35,369,370,372,375,378],{"class":37,"data-line":119,"line":119},[35,371,91],{"class":90},[35,373,374],{"class":66},"Score ",[35,376,377],{"class":70},"int64",[35,379,380],{"class":45},"  `json:\"score\"`\n",[35,382,383,385,387,390,393,396],{"class":37,"data-line":125,"line":125},[35,384,113],{"class":83},[35,386,107],{"class":83},[35,388,389],{"class":45},"\"codepzj\"",[35,391,392],{"class":66},", ",[35,394,395],{"class":160},"100",[35,397,122],{"class":83},[35,399,400],{"class":37,"data-line":148,"line":148},[35,401,403],{"emptyLinePlaceholder":402},true,"\n",[35,405,406,409,411,414,417,419,421,423],{"class":37,"data-line":169,"line":169},[35,407,408],{"class":66},"resp, err ",[35,410,71],{"class":70},[35,412,413],{"class":66}," client.",[35,415,416],{"class":41},"Index",[35,418,139],{"class":83},[35,420,246],{"class":45},[35,422,249],{"class":83},[35,424,425],{"class":66},".\n",[35,427,428,430,433,435,438,440],{"class":37,"data-line":196,"line":196},[35,429,91],{"class":90},[35,431,432],{"class":41},"Document",[35,434,139],{"class":83},[35,436,437],{"class":66},"doc",[35,439,249],{"class":83},[35,441,425],{"class":66},[35,443,445,447,450,452,455,457],{"class":37,"data-line":444,"line":444},8,[35,446,91],{"class":90},[35,448,449],{"class":41},"Id",[35,451,139],{"class":83},[35,453,454],{"class":45},"\"1\"",[35,456,249],{"class":83},[35,458,425],{"class":66},[35,460,462,464,467,469,472,474,477,479],{"class":37,"data-line":461,"line":461},9,[35,463,91],{"class":90},[35,465,466],{"class":41},"Header",[35,468,139],{"class":83},[35,470,471],{"class":45},"\"Content-Type\"",[35,473,392],{"class":66},[35,475,476],{"class":45},"\"application\u002Fjson\"",[35,478,249],{"class":83},[35,480,425],{"class":66},[35,482,484,486,488,490,493,495,497,499],{"class":37,"data-line":483,"line":483},10,[35,485,91],{"class":90},[35,487,466],{"class":41},[35,489,139],{"class":83},[35,491,492],{"class":45},"\"Accept\"",[35,494,392],{"class":66},[35,496,476],{"class":45},[35,498,249],{"class":83},[35,500,425],{"class":66},[35,502,504,506,508,510,512,514,516,518],{"class":37,"data-line":503,"line":503},11,[35,505,91],{"class":90},[35,507,254],{"class":41},[35,509,139],{"class":83},[35,511,259],{"class":66},[35,513,262],{"class":41},[35,515,139],{"class":97},[35,517,249],{"class":97},[35,519,145],{"class":83},[35,521,523,525,527,529,531,533],{"class":37,"data-line":522,"line":522},12,[35,524,151],{"class":70},[35,526,154],{"class":66},[35,528,157],{"class":70},[35,530,161],{"class":160},[35,532,164],{"class":66},[35,534,84],{"class":83},[35,536,538,540,542,544,546,549,551,553,555],{"class":37,"data-line":537,"line":537},13,[35,539,91],{"class":90},[35,541,174],{"class":66},[35,543,177],{"class":41},[35,545,139],{"class":97},[35,547,548],{"class":45},"\"创建文档失败: ",[35,550,185],{"class":160},[35,552,188],{"class":45},[35,554,191],{"class":66},[35,556,145],{"class":97},[35,558,560],{"class":37,"data-line":559,"line":559},14,[35,561,122],{"class":83},[35,563,565,567,569,571,574,577],{"class":37,"data-line":564,"line":564},15,[35,566,312],{"class":66},[35,568,315],{"class":41},[35,570,139],{"class":83},[35,572,573],{"class":45},"\"文档创建成功:\"",[35,575,576],{"class":66},", resp",[35,578,145],{"class":83},[580,581,582],"blockquote",{},[10,583,584,588,589,216,592,595,596,599,600,603],{},[585,586,587],"strong",{},"注意","：TypedClient v9 需要显式设置 ",[14,590,591],{"code":591},"Content-Type",[14,593,594],{"code":594},"Accept"," 为 ",[14,597,598],{"code":598},"application\u002Fjson","，否则会报 ",[14,601,602],{"code":602},"[media_type_header_exception]","。",[334,605,606],{"id":606},"查询文档",[26,608,610],{"className":58,"code":609,"language":42,"meta":31,"style":31},"resp, err := client.Get(\"my-index\", \"1\").\n    Header(\"Content-Type\", \"application\u002Fjson\").\n    Header(\"Accept\", \"application\u002Fjson\").\n    Do(context.Background())\nif err != nil {\n    log.Fatalf(\"获取文档失败: %v\", err)\n}\nfmt.Println(\"文档内容:\", resp)\n",[14,611,612,635,653,671,689,703,724,728],{"__ignoreMap":31},[35,613,614,616,618,620,623,625,627,629,631,633],{"class":37,"data-line":38,"line":38},[35,615,408],{"class":66},[35,617,71],{"class":70},[35,619,413],{"class":66},[35,621,622],{"class":41},"Get",[35,624,139],{"class":83},[35,626,246],{"class":45},[35,628,392],{"class":66},[35,630,454],{"class":45},[35,632,249],{"class":83},[35,634,425],{"class":66},[35,636,637,639,641,643,645,647,649,651],{"class":37,"data-line":87,"line":87},[35,638,91],{"class":90},[35,640,466],{"class":41},[35,642,139],{"class":83},[35,644,471],{"class":45},[35,646,392],{"class":66},[35,648,476],{"class":45},[35,650,249],{"class":83},[35,652,425],{"class":66},[35,654,655,657,659,661,663,665,667,669],{"class":37,"data-line":119,"line":119},[35,656,91],{"class":90},[35,658,466],{"class":41},[35,660,139],{"class":83},[35,662,492],{"class":45},[35,664,392],{"class":66},[35,666,476],{"class":45},[35,668,249],{"class":83},[35,670,425],{"class":66},[35,672,673,675,677,679,681,683,685,687],{"class":37,"data-line":125,"line":125},[35,674,91],{"class":90},[35,676,254],{"class":41},[35,678,139],{"class":83},[35,680,259],{"class":66},[35,682,262],{"class":41},[35,684,139],{"class":97},[35,686,249],{"class":97},[35,688,145],{"class":83},[35,690,691,693,695,697,699,701],{"class":37,"data-line":148,"line":148},[35,692,151],{"class":70},[35,694,154],{"class":66},[35,696,157],{"class":70},[35,698,161],{"class":160},[35,700,164],{"class":66},[35,702,84],{"class":83},[35,704,705,707,709,711,713,716,718,720,722],{"class":37,"data-line":169,"line":169},[35,706,91],{"class":90},[35,708,174],{"class":66},[35,710,177],{"class":41},[35,712,139],{"class":97},[35,714,715],{"class":45},"\"获取文档失败: ",[35,717,185],{"class":160},[35,719,188],{"class":45},[35,721,191],{"class":66},[35,723,145],{"class":97},[35,725,726],{"class":37,"data-line":196,"line":196},[35,727,122],{"class":83},[35,729,730,732,734,736,739,741],{"class":37,"data-line":444,"line":444},[35,731,312],{"class":66},[35,733,315],{"class":41},[35,735,139],{"class":83},[35,737,738],{"class":45},"\"文档内容:\"",[35,740,576],{"class":66},[35,742,145],{"class":83},[334,744,745],{"id":745},"更新文档",[26,747,749],{"className":58,"code":748,"language":42,"meta":31,"style":31},"docUpdate := struct {\n    Score int64 `json:\"score\"`\n}{666}\n\nresp, err := client.Update(\"my-index\", \"1\").\n    Doc(docUpdate).\n    Header(\"Content-Type\", \"application\u002Fjson\").\n    Header(\"Accept\", \"application\u002Fjson\").\n    Do(context.Background())\nif err != nil {\n    log.Fatalf(\"更新文档失败: %v\", err)\n}\nfmt.Println(\"文档更新成功:\", resp)\n",[14,750,751,764,775,786,790,813,829,847,865,883,897,918,922],{"__ignoreMap":31},[35,752,753,756,758,760,762],{"class":37,"data-line":38,"line":38},[35,754,755],{"class":66},"docUpdate ",[35,757,71],{"class":70},[35,759,351],{"class":70},[35,761,164],{"class":66},[35,763,84],{"class":83},[35,765,766,768,770,772],{"class":37,"data-line":87,"line":87},[35,767,91],{"class":90},[35,769,374],{"class":66},[35,771,377],{"class":70},[35,773,774],{"class":45}," `json:\"score\"`\n",[35,776,777,779,781,784],{"class":37,"data-line":119,"line":119},[35,778,113],{"class":83},[35,780,107],{"class":83},[35,782,783],{"class":160},"666",[35,785,122],{"class":83},[35,787,788],{"class":37,"data-line":125,"line":125},[35,789,403],{"emptyLinePlaceholder":402},[35,791,792,794,796,798,801,803,805,807,809,811],{"class":37,"data-line":148,"line":148},[35,793,408],{"class":66},[35,795,71],{"class":70},[35,797,413],{"class":66},[35,799,800],{"class":41},"Update",[35,802,139],{"class":83},[35,804,246],{"class":45},[35,806,392],{"class":66},[35,808,454],{"class":45},[35,810,249],{"class":83},[35,812,425],{"class":66},[35,814,815,817,820,822,825,827],{"class":37,"data-line":169,"line":169},[35,816,91],{"class":90},[35,818,819],{"class":41},"Doc",[35,821,139],{"class":83},[35,823,824],{"class":66},"docUpdate",[35,826,249],{"class":83},[35,828,425],{"class":66},[35,830,831,833,835,837,839,841,843,845],{"class":37,"data-line":196,"line":196},[35,832,91],{"class":90},[35,834,466],{"class":41},[35,836,139],{"class":83},[35,838,471],{"class":45},[35,840,392],{"class":66},[35,842,476],{"class":45},[35,844,249],{"class":83},[35,846,425],{"class":66},[35,848,849,851,853,855,857,859,861,863],{"class":37,"data-line":444,"line":444},[35,850,91],{"class":90},[35,852,466],{"class":41},[35,854,139],{"class":83},[35,856,492],{"class":45},[35,858,392],{"class":66},[35,860,476],{"class":45},[35,862,249],{"class":83},[35,864,425],{"class":66},[35,866,867,869,871,873,875,877,879,881],{"class":37,"data-line":461,"line":461},[35,868,91],{"class":90},[35,870,254],{"class":41},[35,872,139],{"class":83},[35,874,259],{"class":66},[35,876,262],{"class":41},[35,878,139],{"class":97},[35,880,249],{"class":97},[35,882,145],{"class":83},[35,884,885,887,889,891,893,895],{"class":37,"data-line":483,"line":483},[35,886,151],{"class":70},[35,888,154],{"class":66},[35,890,157],{"class":70},[35,892,161],{"class":160},[35,894,164],{"class":66},[35,896,84],{"class":83},[35,898,899,901,903,905,907,910,912,914,916],{"class":37,"data-line":503,"line":503},[35,900,91],{"class":90},[35,902,174],{"class":66},[35,904,177],{"class":41},[35,906,139],{"class":97},[35,908,909],{"class":45},"\"更新文档失败: ",[35,911,185],{"class":160},[35,913,188],{"class":45},[35,915,191],{"class":66},[35,917,145],{"class":97},[35,919,920],{"class":37,"data-line":522,"line":522},[35,921,122],{"class":83},[35,923,924,926,928,930,933,935],{"class":37,"data-line":537,"line":537},[35,925,312],{"class":66},[35,927,315],{"class":41},[35,929,139],{"class":83},[35,931,932],{"class":45},"\"文档更新成功:\"",[35,934,576],{"class":66},[35,936,145],{"class":83},[334,938,939],{"id":939},"删除文档",[26,941,943],{"className":58,"code":942,"language":42,"meta":31,"style":31},"resp, err := client.Delete(\"my-index\", \"1\").\n    Header(\"Content-Type\", \"application\u002Fjson\").\n    Header(\"Accept\", \"application\u002Fjson\").\n    Do(context.Background())\nif err != nil {\n    log.Fatalf(\"删除文档失败: %v\", err)\n}\nfmt.Println(\"文档删除成功:\", resp)\n",[14,944,945,968,986,1004,1022,1036,1057,1061],{"__ignoreMap":31},[35,946,947,949,951,953,956,958,960,962,964,966],{"class":37,"data-line":38,"line":38},[35,948,408],{"class":66},[35,950,71],{"class":70},[35,952,413],{"class":66},[35,954,955],{"class":41},"Delete",[35,957,139],{"class":83},[35,959,246],{"class":45},[35,961,392],{"class":66},[35,963,454],{"class":45},[35,965,249],{"class":83},[35,967,425],{"class":66},[35,969,970,972,974,976,978,980,982,984],{"class":37,"data-line":87,"line":87},[35,971,91],{"class":90},[35,973,466],{"class":41},[35,975,139],{"class":83},[35,977,471],{"class":45},[35,979,392],{"class":66},[35,981,476],{"class":45},[35,983,249],{"class":83},[35,985,425],{"class":66},[35,987,988,990,992,994,996,998,1000,1002],{"class":37,"data-line":119,"line":119},[35,989,91],{"class":90},[35,991,466],{"class":41},[35,993,139],{"class":83},[35,995,492],{"class":45},[35,997,392],{"class":66},[35,999,476],{"class":45},[35,1001,249],{"class":83},[35,1003,425],{"class":66},[35,1005,1006,1008,1010,1012,1014,1016,1018,1020],{"class":37,"data-line":125,"line":125},[35,1007,91],{"class":90},[35,1009,254],{"class":41},[35,1011,139],{"class":83},[35,1013,259],{"class":66},[35,1015,262],{"class":41},[35,1017,139],{"class":97},[35,1019,249],{"class":97},[35,1021,145],{"class":83},[35,1023,1024,1026,1028,1030,1032,1034],{"class":37,"data-line":148,"line":148},[35,1025,151],{"class":70},[35,1027,154],{"class":66},[35,1029,157],{"class":70},[35,1031,161],{"class":160},[35,1033,164],{"class":66},[35,1035,84],{"class":83},[35,1037,1038,1040,1042,1044,1046,1049,1051,1053,1055],{"class":37,"data-line":169,"line":169},[35,1039,91],{"class":90},[35,1041,174],{"class":66},[35,1043,177],{"class":41},[35,1045,139],{"class":97},[35,1047,1048],{"class":45},"\"删除文档失败: ",[35,1050,185],{"class":160},[35,1052,188],{"class":45},[35,1054,191],{"class":66},[35,1056,145],{"class":97},[35,1058,1059],{"class":37,"data-line":196,"line":196},[35,1060,122],{"class":83},[35,1062,1063,1065,1067,1069,1072,1074],{"class":37,"data-line":444,"line":444},[35,1064,312],{"class":66},[35,1066,315],{"class":41},[35,1068,139],{"class":83},[35,1070,1071],{"class":45},"\"文档删除成功:\"",[35,1073,576],{"class":66},[35,1075,145],{"class":83},[19,1077,1078],{"id":1078},"搜索文档",[334,1080,1081],{"id":1081},"查询全部文档",[26,1083,1085],{"className":58,"code":1084,"language":42,"meta":31,"style":31},"resp, err := client.Search().\n    Index(\"my-index\").\n    Query(&types.Query{\n        MatchAll: &types.MatchAllQuery{},\n    }).\n    Header(\"Content-Type\", \"application\u002Fjson\").\n    Header(\"Accept\", \"application\u002Fjson\").\n    Do(context.Background())\nif err != nil {\n    log.Fatalf(\"搜索文档失败: %v\", err)\n}\n\nfor _, hit := range resp.Hits.Hits {\n    fmt.Printf(\"%s\\n\", hit.Source_)\n}\n",[14,1086,1087,1104,1118,1139,1164,1176,1194,1212,1230,1244,1265,1269,1273,1291,1314],{"__ignoreMap":31},[35,1088,1089,1091,1093,1095,1098,1100,1102],{"class":37,"data-line":38,"line":38},[35,1090,408],{"class":66},[35,1092,71],{"class":70},[35,1094,413],{"class":66},[35,1096,1097],{"class":41},"Search",[35,1099,139],{"class":83},[35,1101,249],{"class":83},[35,1103,425],{"class":66},[35,1105,1106,1108,1110,1112,1114,1116],{"class":37,"data-line":87,"line":87},[35,1107,91],{"class":90},[35,1109,416],{"class":41},[35,1111,139],{"class":83},[35,1113,246],{"class":45},[35,1115,249],{"class":83},[35,1117,425],{"class":66},[35,1119,1120,1122,1125,1127,1130,1133,1135,1137],{"class":37,"data-line":119,"line":119},[35,1121,91],{"class":90},[35,1123,1124],{"class":41},"Query",[35,1126,139],{"class":83},[35,1128,1129],{"class":70},"&",[35,1131,1132],{"class":41},"types",[35,1134,77],{"class":66},[35,1136,1124],{"class":41},[35,1138,84],{"class":97},[35,1140,1141,1143,1145,1148,1150,1152,1154,1157,1160,1162],{"class":37,"data-line":125,"line":125},[35,1142,91],{"class":90},[35,1144,91],{"class":90},[35,1146,1147],{"class":66},"MatchAll: ",[35,1149,1129],{"class":70},[35,1151,1132],{"class":41},[35,1153,77],{"class":66},[35,1155,1156],{"class":41},"MatchAllQuery",[35,1158,107],{"class":1159},"sqkie",[35,1161,113],{"class":1159},[35,1163,116],{"class":66},[35,1165,1166,1168,1170,1172,1174],{"class":37,"data-line":148,"line":148},[35,1167,91],{"class":90},[35,1169,31],{"class":66},[35,1171,113],{"class":97},[35,1173,249],{"class":83},[35,1175,425],{"class":66},[35,1177,1178,1180,1182,1184,1186,1188,1190,1192],{"class":37,"data-line":169,"line":169},[35,1179,91],{"class":90},[35,1181,466],{"class":41},[35,1183,139],{"class":83},[35,1185,471],{"class":45},[35,1187,392],{"class":66},[35,1189,476],{"class":45},[35,1191,249],{"class":83},[35,1193,425],{"class":66},[35,1195,1196,1198,1200,1202,1204,1206,1208,1210],{"class":37,"data-line":196,"line":196},[35,1197,91],{"class":90},[35,1199,466],{"class":41},[35,1201,139],{"class":83},[35,1203,492],{"class":45},[35,1205,392],{"class":66},[35,1207,476],{"class":45},[35,1209,249],{"class":83},[35,1211,425],{"class":66},[35,1213,1214,1216,1218,1220,1222,1224,1226,1228],{"class":37,"data-line":444,"line":444},[35,1215,91],{"class":90},[35,1217,254],{"class":41},[35,1219,139],{"class":83},[35,1221,259],{"class":66},[35,1223,262],{"class":41},[35,1225,139],{"class":97},[35,1227,249],{"class":97},[35,1229,145],{"class":83},[35,1231,1232,1234,1236,1238,1240,1242],{"class":37,"data-line":461,"line":461},[35,1233,151],{"class":70},[35,1235,154],{"class":66},[35,1237,157],{"class":70},[35,1239,161],{"class":160},[35,1241,164],{"class":66},[35,1243,84],{"class":83},[35,1245,1246,1248,1250,1252,1254,1257,1259,1261,1263],{"class":37,"data-line":483,"line":483},[35,1247,91],{"class":90},[35,1249,174],{"class":66},[35,1251,177],{"class":41},[35,1253,139],{"class":97},[35,1255,1256],{"class":45},"\"搜索文档失败: ",[35,1258,185],{"class":160},[35,1260,188],{"class":45},[35,1262,191],{"class":66},[35,1264,145],{"class":97},[35,1266,1267],{"class":37,"data-line":503,"line":503},[35,1268,122],{"class":83},[35,1270,1271],{"class":37,"data-line":522,"line":522},[35,1272,403],{"emptyLinePlaceholder":402},[35,1274,1275,1278,1281,1283,1286,1289],{"class":37,"data-line":537,"line":537},[35,1276,1277],{"class":70},"for",[35,1279,1280],{"class":66}," _, hit ",[35,1282,71],{"class":70},[35,1284,1285],{"class":70}," range",[35,1287,1288],{"class":66}," resp.Hits.Hits ",[35,1290,84],{"class":83},[35,1292,1293,1295,1297,1300,1302,1304,1307,1309,1312],{"class":37,"data-line":559,"line":559},[35,1294,91],{"class":90},[35,1296,312],{"class":66},[35,1298,1299],{"class":41},"Printf",[35,1301,139],{"class":97},[35,1303,188],{"class":45},[35,1305,1306],{"class":160},"%s\\n",[35,1308,188],{"class":45},[35,1310,1311],{"class":66},", hit.Source_",[35,1313,145],{"class":97},[35,1315,1316],{"class":37,"data-line":564,"line":564},[35,1317,122],{"class":83},[334,1319,1320],{"id":1320},"精确匹配",[26,1322,1324],{"className":58,"code":1323,"language":42,"meta":31,"style":31},"resp, err := client.Search().\n    Index(\"my-index\").\n    Query(&types.Query{\n        MatchPhrase: map[string]types.MatchPhraseQuery{\n            \"name\": {Query: \"666\"},\n        },\n    }).\n    Header(\"Content-Type\", \"application\u002Fjson\").\n    Header(\"Accept\", \"application\u002Fjson\").\n    Do(context.Background())\n",[14,1325,1326,1342,1356,1374,1401,1427,1439,1451,1469,1487],{"__ignoreMap":31},[35,1327,1328,1330,1332,1334,1336,1338,1340],{"class":37,"data-line":38,"line":38},[35,1329,408],{"class":66},[35,1331,71],{"class":70},[35,1333,413],{"class":66},[35,1335,1097],{"class":41},[35,1337,139],{"class":83},[35,1339,249],{"class":83},[35,1341,425],{"class":66},[35,1343,1344,1346,1348,1350,1352,1354],{"class":37,"data-line":87,"line":87},[35,1345,91],{"class":90},[35,1347,416],{"class":41},[35,1349,139],{"class":83},[35,1351,246],{"class":45},[35,1353,249],{"class":83},[35,1355,425],{"class":66},[35,1357,1358,1360,1362,1364,1366,1368,1370,1372],{"class":37,"data-line":119,"line":119},[35,1359,91],{"class":90},[35,1361,1124],{"class":41},[35,1363,139],{"class":83},[35,1365,1129],{"class":70},[35,1367,1132],{"class":41},[35,1369,77],{"class":66},[35,1371,1124],{"class":41},[35,1373,84],{"class":97},[35,1375,1376,1378,1380,1383,1386,1388,1390,1392,1394,1396,1399],{"class":37,"data-line":125,"line":125},[35,1377,91],{"class":90},[35,1379,91],{"class":90},[35,1381,1382],{"class":66},"MatchPhrase: ",[35,1384,1385],{"class":70},"map",[35,1387,98],{"class":1159},[35,1389,104],{"class":70},[35,1391,101],{"class":1159},[35,1393,1132],{"class":41},[35,1395,77],{"class":66},[35,1397,1398],{"class":41},"MatchPhraseQuery",[35,1400,84],{"class":1159},[35,1402,1403,1405,1407,1409,1412,1415,1417,1420,1423,1425],{"class":37,"data-line":148,"line":148},[35,1404,91],{"class":90},[35,1406,91],{"class":90},[35,1408,91],{"class":90},[35,1410,1411],{"class":45},"\"name\"",[35,1413,1414],{"class":66},": ",[35,1416,107],{"class":83},[35,1418,1419],{"class":66},"Query: ",[35,1421,1422],{"class":45},"\"666\"",[35,1424,113],{"class":83},[35,1426,116],{"class":66},[35,1428,1429,1431,1433,1435,1437],{"class":37,"data-line":169,"line":169},[35,1430,91],{"class":90},[35,1432,91],{"class":90},[35,1434,31],{"class":66},[35,1436,113],{"class":1159},[35,1438,116],{"class":66},[35,1440,1441,1443,1445,1447,1449],{"class":37,"data-line":196,"line":196},[35,1442,91],{"class":90},[35,1444,31],{"class":66},[35,1446,113],{"class":97},[35,1448,249],{"class":83},[35,1450,425],{"class":66},[35,1452,1453,1455,1457,1459,1461,1463,1465,1467],{"class":37,"data-line":444,"line":444},[35,1454,91],{"class":90},[35,1456,466],{"class":41},[35,1458,139],{"class":83},[35,1460,471],{"class":45},[35,1462,392],{"class":66},[35,1464,476],{"class":45},[35,1466,249],{"class":83},[35,1468,425],{"class":66},[35,1470,1471,1473,1475,1477,1479,1481,1483,1485],{"class":37,"data-line":461,"line":461},[35,1472,91],{"class":90},[35,1474,466],{"class":41},[35,1476,139],{"class":83},[35,1478,492],{"class":45},[35,1480,392],{"class":66},[35,1482,476],{"class":45},[35,1484,249],{"class":83},[35,1486,425],{"class":66},[35,1488,1489,1491,1493,1495,1497,1499,1501,1503],{"class":37,"data-line":483,"line":483},[35,1490,91],{"class":90},[35,1492,254],{"class":41},[35,1494,139],{"class":83},[35,1496,259],{"class":66},[35,1498,262],{"class":41},[35,1500,139],{"class":97},[35,1502,249],{"class":97},[35,1504,145],{"class":83},[580,1506,1507],{},[10,1508,1509,1511],{},[585,1510,587],{},"：查询字段必须和文档字段一致，否则查不到结果。",[19,1513,1515],{"id":1514},"聚合查询求平均分","聚合查询（求平均分）",[26,1517,1519],{"className":58,"code":1518,"language":42,"meta":31,"style":31},"resp, err := client.Search().Index(\"my-index\").\nRequest(&search.Request{\n    Aggregations: map[string]types.Aggregations{\n        \"avg_score\": {\n            Avg: &types.AverageAggregation{\n                Field: some.String(\"score\"),\n            },\n        },\n    },\n}).\nHeader(\"Content-Type\", \"application\u002Fjson\").\nHeader(\"Accept\", \"application\u002Fjson\").Do(context.Background())\nif err != nil {\n    log.Fatalf(\"搜索文档失败: %v\", err)\n}\navgScore := resp.Aggregations[\"avg_score\"]\nfmt.Println(avgScore)\n",[14,1520,1521,1547,1565,1589,1602,1624,1649,1663,1675,1685,1693,1709,1739,1753,1773,1777,1795],{"__ignoreMap":31},[35,1522,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545],{"class":37,"data-line":38,"line":38},[35,1524,408],{"class":66},[35,1526,71],{"class":70},[35,1528,413],{"class":66},[35,1530,1097],{"class":41},[35,1532,139],{"class":83},[35,1534,249],{"class":83},[35,1536,77],{"class":66},[35,1538,416],{"class":41},[35,1540,139],{"class":83},[35,1542,246],{"class":45},[35,1544,249],{"class":83},[35,1546,425],{"class":66},[35,1548,1549,1552,1554,1556,1559,1561,1563],{"class":37,"data-line":87,"line":87},[35,1550,1551],{"class":41},"Request",[35,1553,139],{"class":83},[35,1555,1129],{"class":70},[35,1557,1558],{"class":41},"search",[35,1560,77],{"class":66},[35,1562,1551],{"class":41},[35,1564,84],{"class":97},[35,1566,1567,1569,1572,1574,1576,1578,1580,1582,1584,1587],{"class":37,"data-line":119,"line":119},[35,1568,91],{"class":90},[35,1570,1571],{"class":66},"Aggregations: ",[35,1573,1385],{"class":70},[35,1575,98],{"class":1159},[35,1577,104],{"class":70},[35,1579,101],{"class":1159},[35,1581,1132],{"class":41},[35,1583,77],{"class":66},[35,1585,1586],{"class":41},"Aggregations",[35,1588,84],{"class":1159},[35,1590,1591,1593,1595,1598,1600],{"class":37,"data-line":125,"line":125},[35,1592,91],{"class":90},[35,1594,91],{"class":90},[35,1596,1597],{"class":45},"\"avg_score\"",[35,1599,1414],{"class":66},[35,1601,84],{"class":83},[35,1603,1604,1606,1608,1610,1613,1615,1617,1619,1622],{"class":37,"data-line":148,"line":148},[35,1605,91],{"class":90},[35,1607,91],{"class":90},[35,1609,91],{"class":90},[35,1611,1612],{"class":66},"Avg: ",[35,1614,1129],{"class":70},[35,1616,1132],{"class":41},[35,1618,77],{"class":66},[35,1620,1621],{"class":41},"AverageAggregation",[35,1623,84],{"class":97},[35,1625,1626,1628,1630,1632,1634,1637,1640,1642,1645,1647],{"class":37,"data-line":169,"line":169},[35,1627,91],{"class":90},[35,1629,91],{"class":90},[35,1631,91],{"class":90},[35,1633,91],{"class":90},[35,1635,1636],{"class":66},"Field: some.",[35,1638,1639],{"class":41},"String",[35,1641,139],{"class":1159},[35,1643,1644],{"class":45},"\"score\"",[35,1646,249],{"class":1159},[35,1648,116],{"class":66},[35,1650,1651,1653,1655,1657,1659,1661],{"class":37,"data-line":196,"line":196},[35,1652,91],{"class":90},[35,1654,91],{"class":90},[35,1656,91],{"class":90},[35,1658,31],{"class":66},[35,1660,113],{"class":97},[35,1662,116],{"class":66},[35,1664,1665,1667,1669,1671,1673],{"class":37,"data-line":444,"line":444},[35,1666,91],{"class":90},[35,1668,91],{"class":90},[35,1670,31],{"class":66},[35,1672,113],{"class":83},[35,1674,116],{"class":66},[35,1676,1677,1679,1681,1683],{"class":37,"data-line":461,"line":461},[35,1678,91],{"class":90},[35,1680,31],{"class":66},[35,1682,113],{"class":1159},[35,1684,116],{"class":66},[35,1686,1687,1689,1691],{"class":37,"data-line":483,"line":483},[35,1688,113],{"class":97},[35,1690,249],{"class":83},[35,1692,425],{"class":66},[35,1694,1695,1697,1699,1701,1703,1705,1707],{"class":37,"data-line":503,"line":503},[35,1696,466],{"class":41},[35,1698,139],{"class":83},[35,1700,471],{"class":45},[35,1702,392],{"class":66},[35,1704,476],{"class":45},[35,1706,249],{"class":83},[35,1708,425],{"class":66},[35,1710,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737],{"class":37,"data-line":522,"line":522},[35,1712,466],{"class":41},[35,1714,139],{"class":83},[35,1716,492],{"class":45},[35,1718,392],{"class":66},[35,1720,476],{"class":45},[35,1722,249],{"class":83},[35,1724,77],{"class":66},[35,1726,254],{"class":41},[35,1728,139],{"class":83},[35,1730,259],{"class":66},[35,1732,262],{"class":41},[35,1734,139],{"class":97},[35,1736,249],{"class":97},[35,1738,145],{"class":83},[35,1740,1741,1743,1745,1747,1749,1751],{"class":37,"data-line":537,"line":537},[35,1742,151],{"class":70},[35,1744,154],{"class":66},[35,1746,157],{"class":70},[35,1748,161],{"class":160},[35,1750,164],{"class":66},[35,1752,84],{"class":83},[35,1754,1755,1757,1759,1761,1763,1765,1767,1769,1771],{"class":37,"data-line":559,"line":559},[35,1756,91],{"class":90},[35,1758,174],{"class":66},[35,1760,177],{"class":41},[35,1762,139],{"class":97},[35,1764,1256],{"class":45},[35,1766,185],{"class":160},[35,1768,188],{"class":45},[35,1770,191],{"class":66},[35,1772,145],{"class":97},[35,1774,1775],{"class":37,"data-line":564,"line":564},[35,1776,122],{"class":83},[35,1778,1780,1783,1785,1788,1790,1792],{"class":37,"data-line":1779,"line":1779},16,[35,1781,1782],{"class":66},"avgScore ",[35,1784,71],{"class":70},[35,1786,1787],{"class":66}," resp.Aggregations",[35,1789,98],{"class":83},[35,1791,1597],{"class":45},[35,1793,1794],{"class":83},"]\n",[35,1796,1798,1800,1802,1804,1807],{"class":37,"data-line":1797,"line":1797},17,[35,1799,312],{"class":66},[35,1801,315],{"class":41},[35,1803,139],{"class":83},[35,1805,1806],{"class":66},"avgScore",[35,1808,145],{"class":83},[19,1810,1811],{"id":1811},"总结",[580,1813,1814,1821,1824,1831],{},[10,1815,1816,1817,216,1819,603],{},"TypedClient v9 类型安全，但需要显式设置 ",[14,1818,591],{"code":591},[14,1820,594],{"code":594},[10,1822,1823],{},"字段名必须和索引映射一致，否则搜索不到结果。",[10,1825,1826,1827,1830],{},"聚合结果通过 ",[14,1828,1829],{"code":1829},"Value"," 访问，不再有直接类型字段。",[10,1832,1833],{},"建议封装 CRUD\u002F聚合函数，避免每次手动加 Header 和解指针。",[10,1835,1836,1837,1840,1841,1843,1844,216,1846,1849],{},"TypedClient v9 设计更规范，但和老版本用法差异大，如果你熟悉老版 ",[14,1838,1839],{"code":1839},"elastic","，初期可能会觉得麻烦。不过掌握了 ",[14,1842,466],{"code":466},"、",[14,1845,1551],{"code":1551},[14,1847,1848],{"code":1848},"types.Aggregate"," 的使用后，开发效率还是很高的。",[1851,1852,1853],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sSDpw, html code.shiki .sSDpw{--shiki-default:#005cc5;--shiki-dark:#79b8ff}html pre.shiki code .sJX2D, html code.shiki .sJX2D{--shiki-default:#e36209;--shiki-dark:#ffab70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sqkie, html code.shiki .sqkie{--shiki-default:#5a32a3;--shiki-dark:#b392f0}",{"title":31,"searchDepth":125,"depth":125,"links":1855},[1856,1857,1858,1859,1865,1869,1870],{"id":21,"depth":87,"text":21},{"id":55,"depth":87,"text":55},{"id":223,"depth":87,"text":223},{"id":331,"depth":87,"text":332,"children":1860},[1861,1862,1863,1864],{"id":336,"depth":119,"text":336},{"id":606,"depth":119,"text":606},{"id":745,"depth":119,"text":745},{"id":939,"depth":119,"text":939},{"id":1078,"depth":87,"text":1078,"children":1866},[1867,1868],{"id":1081,"depth":119,"text":1081},{"id":1320,"depth":119,"text":1320},{"id":1514,"depth":87,"text":1515},{"id":1811,"depth":87,"text":1811},[1872],"数据库","2025-10-27","go-elasticsearch v9版本go api的用法",false,"md",null,{"slots":1879},{},"\u002F2025\u002F10\u002Felasticsearch-go",{"text":1882,"minutes":1883,"time":1884,"words":1885},"4 min read",3.39,203400,678,{"title":5,"description":1874},{"loc":1880},"posts\u002F2025\u002F10\u002Felasticsearch-go",[1890],"es","tech","qOUsxhsCHLa2rWKY8H-CGyNfHw0En1l3x6dD3lvFwhg",[1894,1899],{"title":1895,"path":1896,"stem":1897,"date":1898,"type":1891,"children":-1},"kratos中proto文件引入其他proto爆红","\u002F2025\u002F10\u002Fkratos-proto-error","posts\u002F2025\u002F10\u002Fkratos-proto-error","2025-10-25",{"title":1900,"path":1901,"stem":1902,"date":1873,"type":1891,"children":-1},"Elasticsearch 安装与基础操作","\u002F2025\u002F10\u002Felasticsearch","posts\u002F2025\u002F10\u002Felasticsearch",1786555054980]