Go
This is the official Go client for Elasticsearch.
Full documentation is hosted at GitHub and PkgGoDev. This documentation provides only an overview of features.
- One-to-one mapping with REST API.
- Generalized, pluggable architecture.
- Two API styles: low-level and fully typed.
- Fluent DSL builders for constructing queries, aggregations, mappings, and sort options.
- Built-in OpenTelemetry instrumentation for distributed tracing.
- Interceptors for custom middleware (auth rotation, observability, etc.).
- Automatic retries, request compression, and node discovery.
- Helpers for convenience (bulk indexing, JSON encoding, and more).
- Rich set of examples.
The client has a layered architecture where both the low-level and typed APIs share the same transport infrastructure:
graph LR
App["Your Application"]
TC["TypedClient / Client"]
INT["Interceptors"]
TP["Transport"]
ES["Elasticsearch"]
App --> TC
TC --> INT
INT --> TP
TP --> ES
The transport layer handles retry logic, request compression, node selection (round-robin), and connection pooling. Interceptors are optional middleware that can modify requests and responses (e.g., for dynamic authentication or custom logging). See the Configuration reference for all available options.
package main
import (
"context"
"log"
"github.com/elastic/go-elasticsearch/v9"
)
func main() {
es, _ := elasticsearch.NewDefaultClient()
defer es.Close(context.Background())
res, err := es.Info()
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
log.Println(res)
}
package main
import (
"context"
"log"
"github.com/elastic/go-elasticsearch/v9"
)
func main() {
es, _ := elasticsearch.NewTypedClient(elasticsearch.Config{
Addresses: []string{"http://localhost:9200"},
})
defer es.Close(context.Background())
log.Println(es.Info().Do(context.Background()))
}
Please have a look at the collection of comprehensive examples in the repository at https://github.com/elastic/go-elasticsearch/tree/main/_examples.
License
Copyright 2019 Elasticsearch.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.