Go 客户端中的 ES|QL
编辑Go 客户端中的 ES|QL编辑
此页面帮助您了解和使用 Go 客户端中的 ES|QL。
在 Go 客户端中使用 ES|QL 有两种方法
- 直接使用 Elasticsearch ES|QL API:这是最灵活的方法,但也是最复杂的方法,因为您必须以原始形式处理结果。您可以选择结果的精确格式,例如 JSON、CSV 或文本。
- 使用 ES|QL 映射助手:这些映射器负责将原始响应解析为应用程序可以轻松使用的内容。助手可用于对象映射和迭代对象。
如何使用 ES|QL API编辑
ES|QL 查询 API 允许您指定如何返回结果。您可以选择 响应格式,例如 CSV、文本或 JSON,然后使用列分隔符和语言环境等参数对其进行微调。
以下示例获取 ES|QL 结果作为 CSV 并对其进行解析
queryAuthor := `from library | where author == "Isaac Asimov" | sort release_date desc | limit 10` response, err := client.Esql.Query(). Query(queryAuthor). Format("csv"). Do(context.Background()) if err != nil { log.Fatal(err) } reader := csv.NewReader(bytes.NewReader(response)) rows, err := reader.ReadAll() for _, row := range rows { fmt.Println(row) }
使用 ES|QL 结果编辑
前面的示例表明,虽然原始 ES|QL API 提供了最大的灵活性,但要使用结果数据还需要额外的操作。
为了简化操作,请尝试使用 ES|QL 结果的这两种主要表示形式(每种都有自己的映射助手)
- 对象,其中结果中的每一行都映射到应用程序域中的一个对象。这类似于 ORM(对象关系映射器)通常执行的操作。
package main import ( "context" "fmt" "log" "github.com/elastic/go-elasticsearch/v8" "github.com/elastic/go-elasticsearch/v8/typedapi/esql/query" ) type Book struct { Name string `json:"name"` Author string `json:"author"` ReleaseDate string `json:"release_date"` PageCount int `json:"page_count"` } func main() { client, err := elasticsearch.NewTypedClient(elasticsearch.Config{Addresses: []string{"ELASTICSEARCH_URL"}}) if err != nil { log.Fatal(err) } queryAuthor := `from library | where author == "Isaac Asimov" | sort release_date desc | limit 10` qry := client.Esql.Query().Query(queryAuthor) books, err := query.Helper[Book](context.Background(), qry) if err != nil { log.Fatal(err) } for _, book := range books { fmt.Println(book) } }
- 迭代对象,其中结果中的每一行都映射到应用程序域中的一个对象,一次一个。
queryAuthor := `from library | where author == "Isaac Asimov" | sort release_date desc | limit 10` qry := client.Esql.Query().Query(queryAuthor) books, err := query.NewIteratorHelper[Book](context.Background(), qry) if err != nil { log.Fatal(err) } for books.More() { book, err := books.Next() if err != nil { log.Fatal(err) } fmt.Println(book) }